麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 數據庫 > MongoDB > 正文

MongoDB操作符中的$elemMatch問題

2020-10-29 18:40:37
字體:
來源:轉載
供稿:網友

問題

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

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

我們執(zhí)行查詢

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

此時會得到結果嗎?

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

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

分析

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

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

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

那這兩次查詢有啥區(qū)別呢?不同有兩點

  • 是否為二級字段
  • 是否為數組

那我們將數據改為

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

繼續(xù)執(zhí)行查詢

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

此次結果為空集

接下來嘗試查詢

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

此次可得到一條結果

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

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

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

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內容請搜索武林網以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持武林網!

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 日韩黄色片免费看 | 国产亚洲精品久久777777 | 精品一区二区三区欧美 | 在线亚洲综合 | 九九热精品免费 | 鸳鸯谱在线观看高清 | 欧美一级视频网站 | 免费观看国产视频 | 在线成人精品视频 | 欧美片a| av在线高清观看 | 日韩视频在线观看免费视频 | 美国黄色毛片女人性生活片 | 中文字幕观看 | 欧洲色阁中文字幕 | 欧美性生活久久 | 亚洲不卡 | 久久久久久久久久久一区 | 国产色91 | 国产一区二区三区精品在线观看 | 毛片电影网址 | 北京一级毛片 | 美女羞羞视频网站 | 92看片淫黄大片欧美看国产片 | 久久恋| 亚洲一级片免费观看 | 国产精品久久久久久影院8一贰佰 | 日本网站一区二区三区 | 免费一级片观看 | 久久久麻豆| 本站只有精品 | av电影网在线观看 | 91av网址| 国产一区二区三区四区在线 | 久草在线播放视频 | 久久午夜国产 | 精品久久久一二三区播放播放播放视频 | 久久精品男人 | 亚洲欧美国产高清va在线播放 | 久久久久久久久久亚洲精品 | 免费一区二区三区 |