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

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

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

前言

MongoDB是文檔型數(shù)據(jù)庫,每個(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è)條件的語句:

{ "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à)值,如果有疑問大家可以留言交流,謝謝大家對(duì)VEVB武林網(wǎng)的支持。


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

主站蜘蛛池模板: 久久国产精品久久久久 | 久久久久性| 欧美日韩在线视频一区 | av电影免费观看 | 一级做a爱片久久毛片a高清 | 国产成人精品一区二区视频免费 | 特逼视频| 91精品成人福利在线播放 | 成人在线观看一区二区 | 嗯~啊~弄嗯~啊h高潮视频 | 久久精品99国产国产精 | 国产一区二区高清在线 | 欧美精品一区二区三区四区 | 黄色美女免费 | 九九热欧美| 亚洲视屏在线 | 成年免费观看视频 | 久久久久久久.comav | 在线天堂中文在线资源网 | 欧美爱爱视频网站 | 欧美黄色片一级 | 欧美3p激情一区二区三区猛视频 | 精品国产一区二区三区在线观看 | 亚洲成人午夜精品 | 国产日韩在线观看视频 | 香蕉视频1024 | www.48xx.com | 国产乱弄| 国产流白浆高潮在线观看 | 久久精品亚洲精品国产欧美kt∨ | 成人综合区一区 | 欧美成人做爰高潮片免费视频 | 国产精品一品二区三区四区18 | 黄色片免费看网站 | 国产一区日韩精品 | 综合网日日天干夜夜久久 | 久久久视频免费观看 | 91av在线免费视频 | 操你逼| av免费在线播放 | 午夜精品老牛av一区二区三区 |