最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2020年03月31日 08:41:07   作者:秦海山  
這篇文章主要介紹了MongoDB操作符中的$elemMatch問(wèn)題,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

問(wèn)題

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

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

我們執(zhí)行查詢(xún)

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

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

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

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

分析

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

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

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

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

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

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

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

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

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

此次結(jié)果為空集

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

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

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

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

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

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

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

此次結(jié)果為空集

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

那如果我想達(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.

那上邊的查詢(xún)我們可以改成

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ì)專(zhuān)門(mén)總結(jié)一篇有關(guān)MongoDB索引相關(guān)的博客

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

總結(jié)

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

相關(guān)文章

  • Ubuntu16.04手動(dòng)安裝MongoDB的詳細(xì)教程

    Ubuntu16.04手動(dòng)安裝MongoDB的詳細(xì)教程

    本篇文章主要介紹了Ubuntu16.04手動(dòng)安裝MongoDB的詳細(xì)教程,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-07-07
  • MongoDB如何正確中斷正在創(chuàng)建的索引詳解

    MongoDB如何正確中斷正在創(chuàng)建的索引詳解

    這篇文章主要給大家介紹了關(guān)于MongoDB如何正確中斷正在創(chuàng)建的索引的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • MongoDB 導(dǎo)出導(dǎo)入備份恢復(fù)數(shù)據(jù)詳解及實(shí)例

    MongoDB 導(dǎo)出導(dǎo)入備份恢復(fù)數(shù)據(jù)詳解及實(shí)例

    這篇文章主要介紹了MongoDB 導(dǎo)出導(dǎo)入備份恢復(fù)數(shù)據(jù)詳解及實(shí)例的相關(guān)資料,需要的朋友可以參考下
    2016-10-10
  • mongodb中隨機(jī)獲取1條記錄的實(shí)現(xiàn)方法

    mongodb中隨機(jī)獲取1條記錄的實(shí)現(xiàn)方法

    這篇文章運(yùn)用實(shí)例給大家演示了如何在mongodb中隨機(jī)獲取1條記錄,文中介紹的很詳細(xì),有需要的朋友們可以參考借鑒。下面來(lái)一起看看吧。
    2016-09-09
  • MongoDB快速入門(mén)筆記(七)MongoDB的用戶(hù)管理操作

    MongoDB快速入門(mén)筆記(七)MongoDB的用戶(hù)管理操作

    這篇文章主要介紹了MongoDB快速入門(mén)筆記(七)MongoDB的用戶(hù)管理操作 的相關(guān)資料,需要的朋友可以參考下
    2016-06-06
  • 淺析MongoDB用戶(hù)管理

    淺析MongoDB用戶(hù)管理

    mongodb在2.4最新版本中對(duì)用戶(hù)權(quán)限管理做了全新的調(diào)整,把權(quán)限細(xì)化了,增強(qiáng)了安全性,越來(lái)越像mysql的權(quán)限管理了。廢話(huà)少說(shuō),我們來(lái)詳細(xì)看下吧
    2014-08-08
  • Mongodb副本集和分片示例詳解

    Mongodb副本集和分片示例詳解

    這篇文章主要給大家介紹了關(guān)于Mongodb副本集和分片的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Mongodb具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • MongoDB TTL索引的實(shí)例詳解

    MongoDB TTL索引的實(shí)例詳解

    這篇文章主要介紹了 MongoDB TTL索引的實(shí)例詳解的相關(guān)資料,希望通過(guò)本文能幫助到大家,讓大家理解掌握這部分內(nèi)容,需要的朋友可以參考下
    2017-10-10
  • Mongodb在UPDATE操作中使用$pull的操作方法

    Mongodb在UPDATE操作中使用$pull的操作方法

    在UPDATE中使用$pull操作符,刪除數(shù)組中的指定元素或刪除符合條件的數(shù)組元素,本文基于Mongodb的官方文檔,介紹使用$pull,?按照指定條件刪除數(shù)組中的元素,文中通過(guò)代碼示例介紹的非常詳細(xì),需要的朋友可以參考下
    2024-06-06
  • Mongodb中MapReduce實(shí)現(xiàn)數(shù)據(jù)聚合方法詳解

    Mongodb中MapReduce實(shí)現(xiàn)數(shù)據(jù)聚合方法詳解

    Mongodb是針對(duì)大數(shù)據(jù)量環(huán)境下誕生的用于保存大數(shù)據(jù)量的非關(guān)系型數(shù)據(jù)庫(kù),針對(duì)大量的數(shù)據(jù)。接下來(lái)通過(guò)本文給大家介紹Mongodb中MapReduce實(shí)現(xiàn)數(shù)據(jù)聚合方法詳解,感興趣的朋友一起學(xué)習(xí)吧
    2016-05-05

最新評(píng)論

黔南| 阳江市| 和田县| 五大连池市| 天全县| 罗源县| 吕梁市| 澄城县| 黄平县| 临朐县| 都江堰市| 富锦市| 宝应县| 桂平市| 观塘区| 正蓝旗| 九龙县| 绥阳县| 精河县| 临西县| 西贡区| 印江| 秦安县| 收藏| 高平市| 兰西县| 玛多县| 华安县| 台中县| 平江县| 天镇县| 云梦县| 门头沟区| 五峰| 定远县| 衡阳市| 新晃| 南昌市| 昭通市| 无极县| 游戏|