MongoDB操作符中的$elemMatch問題_MongoDB

來源:腳本之家  責任編輯:小易  

Query.GTE("value",3);大于等于>=3www.13333515.buzz防采集請勿采集本網。

問題

如果MongoDB 數據庫集合中僅存在一條記錄

find({ name:\"bobquot.find({$or:[{ a:1 },{ b:2 }]}) With another field db,{ b,$or:[{ a:1 }.foo,中給出的例子如下 Simple: db;foo在mongodb中有$or 操作符的

{ "_id" : ObjectId("5e6b4ef546b5f44e5c5b276d"), "name" : "趙小明", "used_name" : [ "趙明", "趙小朋" ], "age" : 16, "gender" : 0, "relatives" : [ { "name" : "趙剛", "relationship" : 0 }, { "name" : "秀英", "relationship" : 1 } ]}

在mongodb中有$or 操作符的,官網中給出的例子如下 Simple: db.foo.find({$or:[{ a:1 },{ b:2 }]}) With another field db.foo.find({ name:\"bob\",$or:[{ a:1 },{ b:2 }]})

我們執行查詢

對于replica set 中的復secondary 節點默認是不可讀的。在寫多讀少的應用中,使用Replica Sets來實現讀寫分離。通過制在連接時指定或者百在主庫指定slaveOk,由Secondary來分擔讀的壓力,Primary只承擔寫

db.getCollection('Persion').find({"relatives.name": "趙剛", "relatives.relationship": 1})

GridFS是一種在MongoDB中存儲大二進制文件的機制。使用GridFS存文件有如下幾個原因: 利用Grid可以簡化需求。要是已經用了MongoDB,GridFS就可以不需要使用獨立文件存儲架構。GridFS會直接利用

此時會得到結果嗎?

MongoDB自身是不提供事務處理的。如果要實現事務操作,必須自己寫實現代碼。在為你的項目選定數據庫的時候,要根據你的項目來量身選擇。如果需要強事務操作的和數據一致性很高的地方,最好選擇

最開始我想當然的以為是不會出現結果的,但結果往往與期望背道而馳。

什么,一瞬間我陷入了迷茫,Mongo的查詢結果不是必須都滿足所有條件的嗎?

分析

不信邪的我又嘗試了喜聞樂見的小白查詢

db.getCollection('Persion').find({"name": "趙小明", "age": 18})

這次結果為空,嗯,這才是我熟悉的Mongo嘛?

那這兩次查詢有啥區別呢?不同有兩點 是否為二級字段 是否為數組

那我們將數據改為

{ "_id" : ObjectId("5e6b4ef546b5f44e5c5b276d"), "name" : "趙小明", "used_name" : [ "趙明", "趙小朋" ], "age" : 16, "gender" : 0, "relative" : { "name" : "趙剛", "relationship" : 0 }}

繼續執行查詢

db.getCollection('Persion').find({"relatives.name": "趙剛", "relatives.relationship": 1})

GridFS是一種在MongoDB中存儲大二進制文件的機制。使用GridFS存文件有如下幾個原因: 利用Grid可以簡化需求。要是已經用了MongoDB,GridFS就可以不需要使用獨立文件存儲架構。GridFS會直接利用

此次結果為空集

接下來嘗試查詢

db.getCollection('Persion').find({"relatives.name": "趙剛", "relatives.relationship": 0})

此次可得到一條結果

通過上述兩次查詢基本可以排除二級字段的影響

那就是數組的原因了,那具體是為什么呢?

將數據還原為最初的格式,繼續進行不同的查詢

db.getCollection('Persion').find({"relatives.name": "趙剛", "relatives.relationship": 2})

此次結果為空集

那我們可以得到結論,對于數組字段,每個查詢條件僅需有數組中的一項滿足條件即可,而不是數組中必須存在一項滿足所有查詢條件。

那如果我想達到后面的效果要怎么做呢?

解決

此時,我們需要用到我們今天的主角 $elemMatch ,它的官方定義是這樣的:

The $elemMatch operator matches documents that contain an array field with at least one element that matches all the specified query criteria.

{ <field>: { $elemMatch: { <query1>, <query2>, ... } } }

If you specify only a single condition in the $elemMatch expression, you do not need to use $elemMatch.

You cannot specify a $where expression in an $elemMatch.

You cannot specify a $text query expression in an $elemMatch.

那上邊的查詢我們可以改成

db.getCollection('Persion').find({"relatives":{"$elemMatch":{"name": "趙四", "relationship": 0}}})

此時可以得到結果,但

db.getCollection('Persion').find({"relatives":{"$elemMatch":{"name": "趙四", "relationship": 1}}})

結果為空集

結語

此操作符和索引也有一些不得不說的事,今天就不在這里細說了,之后我會專門總結一篇有關MongoDB索引相關的博客

等不及的看官可以自行百度Google一下。

總結

到此這篇關于MongoDB操作符之$elemMatch的文章就介紹到這了,更多相關MongoDB操作符之$elemMatch內容請搜索真格學網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持真格學網!

有人需要的話自己體會。這是我自己想到的方法,也許還有更好的。BasicDBObject my_time=new BasicDBObject();my_time.append("$substr",new Object[]{"$in_time",8,2});DBObject time=new BasicDBObject();time.put("my_time",my_time);DBObject project=new BasicDBObject().append("$project",time);內容來自www.13333515.buzz請勿采集。


  • 本文相關:
  • mongodb 管道的介紹及操作符實例
  • 基于mongodb數據庫的數據類型和$type操作符詳解
  • mongodb 實現主從讀寫分離實現的實例代碼
  • mongodb教程之查詢操作實例
  • 教大家8天學通mongodb——第一天 基礎入門篇
  • sqlserver與mongodb結合使用nhibernate
  • mongodb查詢操作限制返回字段的方法
  • mongodb開啟權限認證的方法步驟詳解
  • mongodb運行日志實現自動分割的方法實例
  • mongodb運維_動力節點java學院整理
  • 淺析mongodb性能優化的相關問題
  • mongodb優化心得分享
  • MongoDB java 怎么使用類似$substr的操作符
  • 在c#里面怎么寫 mongodb大于等于操作符
  • MongoDB java 怎么使用類似$substr的操作符
  • 關于mongoDB的$or 怎么用java實現
  • 關于mongoDB的$or 怎么用java實現
  • 關于mongoDB的$or 怎么用java實現
  • mongodb的secondary可以支持寫操作嗎
  • 怎么用 mongoDB C++ API 操作GridFS存儲大文件
  • mongoDB在 java中的事務怎么實現
  • 千萬別用MongoDB?真的嗎
  • 網站首頁網頁制作腳本下載服務器操作系統網站運營平面設計媒體動畫電腦基礎硬件教程網絡安全mssqlmysqlmariadboracledb2mssql2008mssql2005sqlitepostgresqlmongodbredisaccess數據庫文摘數據庫其它首頁mongodbmongodb 管道的介紹及操作符實例基于mongodb數據庫的數據類型和$type操作符詳解mongodb 實現主從讀寫分離實現的實例代碼mongodb教程之查詢操作實例教大家8天學通mongodb——第一天 基礎入門篇sqlserver與mongodb結合使用nhibernatemongodb查詢操作限制返回字段的方法mongodb開啟權限認證的方法步驟詳解mongodb運行日志實現自動分割的方法實例mongodb運維_動力節點java學院整理淺析mongodb性能優化的相關問題mongodb優化心得分享mongodb常用操作命令大全mongodb各種查詢操作詳解mongodb數據庫插入、更新和刪除操mongodb 數據庫操作--備份 還原 mongodb插入數據的3種方法mongodb中使用distinct去重的簡單mongodb整庫備份與還原以及單個cmongodb查詢操作限制返回字段的方mongodb 實現遠程連接php中mongodb數據庫的連接、添加yum源安裝mongodb圖文教程mongodb基礎入門之創建、刪除集合操作mongodb 數據類型及mongoose常用curdnosql反模式 - 文檔數據庫篇mongodb入門教程之常用的運維技術介紹mongodb最大連接數設置失效的異常分析過程mongodb運行狀態監控、性能分析工具mongo通用mapreduce程序復制hbase表數據mongodb快速入門筆記(三)之mongodb插入文mongodb中游標的深入學習
    免責聲明 - 關于我們 - 聯系我們 - 廣告聯系 - 友情鏈接 - 幫助中心 - 頻道導航
    Copyright © 2017 www.13333515.buzz All Rights Reserved
    3排列五开奖结果