主頁 > 知識庫 > MongoDB如何對數(shù)組中的元素進(jìn)行查詢詳解

MongoDB如何對數(shù)組中的元素進(jìn)行查詢詳解

熱門標(biāo)簽:杭州人工電銷機(jī)器人價(jià)格 呼和浩特電銷外呼系統(tǒng)加盟 云南外呼系統(tǒng) 廣州長安公司怎樣申請400電話 蘋果汽車租賃店地圖標(biāo)注 電銷機(jī)器人是什么軟件 怎么投訴地圖標(biāo)注 老虎洗衣店地圖標(biāo)注 濟(jì)南電銷機(jī)器人加盟公司

前言

MongoDB是文檔型數(shù)據(jù)庫,每個(gè)文檔(doc)表示數(shù)據(jù)的一項(xiàng)記錄。相比關(guān)系型DB的row只能使用簡單的數(shù)據(jù)類型,doc能夠使用復(fù)雜的數(shù)據(jù)類型:內(nèi)嵌doc,數(shù)組。MongoDB的數(shù)組是一系列元素的集合,使用中括號 [] 表示數(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)算。

請看示例:

假設(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é)果是, 對數(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é)果是, 對數(shù)組進(jìn)行匹配, 其中需要有子元素 滿足 "qList.qid": 1, 還需要有子元素 滿足 "qList.qid": 1, , 適合進(jìn)行單個(gè)條件的匹配。

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

{ "qList.qid": 1}

或者

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

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

總結(jié)

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

您可能感興趣的文章:
  • MongoDB中多表關(guān)聯(lián)查詢($lookup)的深入講解
  • Mongodb實(shí)現(xiàn)的關(guān)聯(lián)表查詢功能【population方法】
  • MongoDB各種查詢操作詳解
  • MongoDB查詢操作限制返回字段的方法
  • PHP中MongoDB數(shù)據(jù)庫的連接、添加、修改、查詢、刪除等操作實(shí)例
  • MongoDB下根據(jù)數(shù)組大小進(jìn)行查詢的方法
  • MongoDB導(dǎo)出查詢結(jié)果到文件例子
  • MongoDB查詢技巧總結(jié)
  • MongoDB查詢性能優(yōu)化驗(yàn)證及驗(yàn)證
  • mongodb實(shí)現(xiàn)同庫聯(lián)表查詢方法示例
  • MongoDB的基礎(chǔ)查詢和索引操作方法總結(jié)
  • MongoDB多表關(guān)聯(lián)查詢操作實(shí)例詳解

標(biāo)簽:玉林 雞西 自貢 遼陽 廈門 泰安 興安盟 無錫

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《MongoDB如何對數(shù)組中的元素進(jìn)行查詢詳解》,本文關(guān)鍵詞  MongoDB,如何,對,數(shù)組,中的,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《MongoDB如何對數(shù)組中的元素進(jìn)行查詢詳解》相關(guān)的同類信息!
  • 本頁收集關(guān)于MongoDB如何對數(shù)組中的元素進(jìn)行查詢詳解的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章