a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁(yè) > 數(shù)據(jù)庫(kù) > MongoDB > 正文

MongoDB如何對(duì)數(shù)組中的元素進(jìn)行查詢?cè)斀?/h1>
2020-03-14 12:51:31
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

前言

MongoDB是文檔型數(shù)據(jù)庫(kù),每個(gè)文檔(doc)表示數(shù)據(jù)的一項(xiàng)記錄。相比關(guān)系型DB的row只能使用簡(jiǎn)單的數(shù)據(jù)類型,doc能夠使用復(fù)雜的數(shù)據(jù)類型:內(nèi)嵌doc,數(shù)組。MongoDB的數(shù)組是一系列元素的集合,使用中括號(hào) [] 表示數(shù)組,例如:[1,2,3]的元素是整數(shù)值,[{name:"t5"}, {name:"t7"}],[ {name:"t5", age:21}, {name:"t7", age:22} ]的元素是doc。

在MongoDB中,數(shù)組元素允許重復(fù),元素的位置是固定的。如果兩個(gè)數(shù)組相等,那么這兩個(gè)數(shù)組的元素和及其位置都相同。

MongoDB中根據(jù)數(shù)組子元素進(jìn)行匹配,有兩種方式。

  • 使用 “[數(shù)組名].[子元素字段名]” 的方式進(jìn)行匹配。
  • 使用 “[數(shù)組名]” $elemMatch { [子元素字段名] }的方式。

不同點(diǎn)在于所匹配的主體不同。

“[數(shù)組名].[子元素字段名]” 的方式匹配的主體為 “[數(shù)組名]”, 適用于單個(gè)條件,如果是多個(gè)條件, 則變成數(shù)組子元素之間的“或”運(yùn)算。

請(qǐng)看示例:

假設(shè)某個(gè)集合內(nèi)有2條數(shù)據(jù):

document1 如下:

{  "_id" : "123",  "name" : "人文醫(yī)學(xué)",  "qList" : [  {   "qid" : 1,    "content" : "醫(yī)學(xué)倫理學(xué)的公正原則",    "reorderFlag" : 1  },   {   "qid" : 2,    "content" : "制定有關(guān)人體實(shí)驗(yàn)的基本原則",    "reorderFlag" : 0  } ]}

document2 如下:

{  "_id" : "124",  "name" : "人文醫(yī)學(xué)2",  "qList" : [  {   "qid" : 1,    "content" : "醫(yī)學(xué)倫理學(xué)的公正原則",    "reorderFlag" : 0  },   {   "qid" : 2,    "content" : "制定有關(guān)人體實(shí)驗(yàn)的基本原則",    "reorderFlag" : 1  } ]}

找出數(shù)組中, 具有 qid=1并且reorderFlag=0的記錄

查詢數(shù)組內(nèi)同一條記錄同時(shí)滿足2個(gè)條件的語(yǔ)句:

{ "qList": { $elemMatch: { "qid": 1, "reorderFlag": 0} } }

查詢結(jié)果是:

{  "_id" : "124",  "name" : "人文醫(yī)學(xué)2",  "qList" : [  {   "qid" : NumberInt(1),    "content" : "醫(yī)學(xué)倫理學(xué)的公正原則",    "reorderFlag" : NumberInt(0)  },   {   "qid" : NumberInt(2),    "content" : "制定有關(guān)人體實(shí)驗(yàn)的基本原則",    "reorderFlag" : NumberInt(1)  } ]}

可以看到, 其執(zhí)行結(jié)果是, 對(duì)數(shù)組內(nèi)的每一個(gè)子元素, 執(zhí)行 $elemMatch 匹配, 可以進(jìn)行多個(gè)條件的匹配。

找出數(shù)組中, qid=1 或者 reorderFlag=0的記錄

數(shù)組整體能滿足以下2個(gè)條件:

{ "qList.qid": 1, "qList.reorderFlag": 0}

執(zhí)行的主體是 qList, 要求: 有某些子元素滿足 qid=1, 也要有某些子元素滿足 reorderFlag=0`。

查詢結(jié)果是:

{  "_id" : "123",  "name" : "人文醫(yī)學(xué)",  "qList" : [  {   "qid" : NumberInt(1),    "content" : "醫(yī)學(xué)倫理學(xué)的公正原則",    "reorderFlag" : NumberInt(1)  },   {   "qid" : NumberInt(2),    "content" : "制定有關(guān)人體實(shí)驗(yàn)的基本原則",    "reorderFlag" : NumberInt(0)  } ]}{  "_id" : "124",  "name" : "人文醫(yī)學(xué)2",  "qList" : [  {   "qid" : NumberInt(1),    "content" : "醫(yī)學(xué)倫理學(xué)的公正原則",    "reorderFlag" : NumberInt(0)  },   {   "qid" : NumberInt(2),    "content" : "制定有關(guān)人體實(shí)驗(yàn)的基本原則",    "reorderFlag" : NumberInt(1)  } ]}

可以看到, 其執(zhí)行結(jié)果是, 對(duì)數(shù)組進(jìn)行匹配, 其中需要有子元素 滿足 "qList.qid": 1, 還需要有子元素 滿足 "qList.qid": 1, , 適合進(jìn)行單個(gè)條件的匹配。

如果是單個(gè)條件匹配, 則以下方式結(jié)果是一樣的。

{ "qList.qid": 1}

或者

{ "qList": { $elemMatch: { "qid": 1} } }

查詢的結(jié)果都是2條記錄。

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)VEVB武林網(wǎng)的支持。


注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到MongoDB頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

主站蜘蛛池模板: 在线不卡一区 | 欧美激情视频免费观看 | 最新高清无码专区 | 在线观看欧美一区二区三区 | 亚洲免费在线观看 | 色综合色综合网色综合 | 欧美淫视频 | 日韩欧美精品在线 | 久久久精品国产 | 日一区二区 | 中文字幕第31页 | 亚洲一区二区在线 | 国产精品一区二 | 亚洲国产福利 | 国产中文视频 | 91精品一区二区三区久久久久久 | 欧美视频亚洲视频 | 久久久久久91香蕉国产 | 成人 在线| 久久精品亚洲 | 久久99久久98精品免观看软件 | 国产精品一区二区三 | 欧美一级欧美三级在线观看 | 国产激情在线 | 玖玖玖影院 | 国产成人免费视频网站高清观看视频 | av成人在线观看 | 黄色av网站在线播放 | 国产亚洲一区二区三区在线观看 | 国产一区二区三区四区在线观看 | 狠狠操操 | 超碰导航 | 中文字幕一区二区三区乱码图片 | 一色桃子av一区二区免费 | 精品无人乱码一区二区三区 | 亚洲一区二区三区视频 | 国产成人精品免高潮在线观看 | 欧美二区在线 | 日韩精品一区在线 | 色噜| 欧美乱操 |