婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁(yè) > 知識(shí)庫(kù) > MongoDB操作符中的$elemMatch問(wèn)題

MongoDB操作符中的$elemMatch問(wèn)題

熱門標(biāo)簽:crm外呼系統(tǒng)聯(lián)系方式 智能外呼系統(tǒng)官網(wǎng) 青白江400企業(yè)電話申請(qǐng) 內(nèi)蒙古營(yíng)銷智能外呼系統(tǒng)哪個(gè)好 呼和浩特外呼系統(tǒng)原理是什么 小裙科技電銷機(jī)器人怎樣 外呼線路資源屬于電信業(yè)務(wù)嗎 長(zhǎng)沙電銷外呼防封卡是什么 河南電話外呼系統(tǒng)招商

問(wèn)題

如果MongoDB 數(shù)據(jù)庫(kù)集合中僅存在一條記錄

{
  "_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})

此時(shí)會(huì)得到結(jié)果嗎?

最開始我想當(dāng)然的以為是不會(huì)出現(xiàn)結(jié)果的,但結(jié)果往往與期望背道而馳。

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

分析

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

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

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

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

  • 是否為二級(jí)字段
  • 是否為數(shù)組

那我們將數(shù)據(jù)改為

{
  "_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})

此次結(jié)果為空集

接下來(lái)嘗試查詢

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

此次可得到一條結(jié)果

通過(guò)上述兩次查詢基本可以排除二級(jí)字段的影響

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

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

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

此次結(jié)果為空集

那我們可以得到結(jié)論,對(duì)于數(shù)組字段,每個(gè)查詢條件僅需有數(shù)組中的一項(xiàng)滿足條件即可,而不是數(shù)組中必須存在一項(xiàng)滿足所有查詢條件。

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

解決

此時(shí),我們需要用到我們今天的主角 $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}}})

此時(shí)可以得到結(jié)果,但

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

結(jié)果為空集

結(jié)語(yǔ)

此操作符和索引也有一些不得不說(shuō)的事,今天就不在這里細(xì)說(shuō)了,之后我會(huì)專門總結(jié)一篇有關(guān)MongoDB索引相關(guān)的博客

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

總結(jié)

到此這篇關(guān)于MongoDB操作符之$elemMatch的文章就介紹到這了,更多相關(guān)MongoDB操作符之$elemMatch內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • MongoDB 管道的介紹及操作符實(shí)例
  • 基于MongoDB數(shù)據(jù)庫(kù)的數(shù)據(jù)類型和$type操作符詳解

標(biāo)簽:呼倫貝爾 舟山 安順 池州 菏澤 黃石 白山 楚雄

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《MongoDB操作符中的$elemMatch問(wèn)題》,本文關(guān)鍵詞  MongoDB,操作,符,中的,elemMatch,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《MongoDB操作符中的$elemMatch問(wèn)題》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于MongoDB操作符中的$elemMatch問(wèn)題的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    主站蜘蛛池模板: 克拉玛依市| 海伦市| 安多县| 兴宁市| 黄平县| 新邵县| 竹山县| 饶阳县| 江阴市| 竹溪县| 阿拉善右旗| 扶余县| 南雄市| 界首市| 乌拉特后旗| 泸溪县| 彰武县| 读书| 固镇县| 盐亭县| 泾源县| 什邡市| 大港区| 西藏| 加查县| 山东省| 太谷县| 乌鲁木齐县| 绵竹市| 新泰市| 吉安县| 辽中县| 开封县| 南雄市| 襄樊市| 定西市| 高安市| 苍梧县| 邯郸县| 宝山区| 巫溪县|