溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么在MongoDB中對數組中的元素進行查詢

發布時間:2021-01-04 16:05:47 來源:億速云 閱讀:140 作者:Leah 欄目:MongoDB數據庫

怎么在MongoDB中對數組中的元素進行查詢?相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。

前言

MongoDB是文檔型數據庫,每個文檔(doc)表示數據的一項記錄。相比關系型DB的row只能使用簡單的數據類型,doc能夠使用復雜的數據類型:內嵌doc,數組。MongoDB的數組是一系列元素的集合,使用中括號 [] 表示數組,例如:[1,2,3]的元素是整數值,[{name:"t5"}, {name:"t7"}],[ {name:"t5", age:21}, {name:"t7", age:22} ]的元素是doc。

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

MongoDB中根據數組子元素進行匹配,有兩種方式。

  • 使用 “[數組名].[子元素字段名]” 的方式進行匹配。

  • 使用 “[數組名]” $elemMatch { [子元素字段名] }的方式。

不同點在于所匹配的主體不同。

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

請看示例:

假設某個集合內有2條數據:

document1 如下:

{ 
 "_id" : "123", 
 "name" : "人文醫學", 
 "qList" : [
  {
   "qid" : 1, 
   "content" : "醫學倫理學的公正原則", 
   "reorderFlag" : 1
  }, 
  {
   "qid" : 2, 
   "content" : "制定有關人體實驗的基本原則", 
   "reorderFlag" : 0
  }
 ]
}

document2 如下:

{ 
 "_id" : "124", 
 "name" : "人文醫學2", 
 "qList" : [
  {
   "qid" : 1, 
   "content" : "醫學倫理學的公正原則", 
   "reorderFlag" : 0
  }, 
  {
   "qid" : 2, 
   "content" : "制定有關人體實驗的基本原則", 
   "reorderFlag" : 1
  }
 ]
}

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

查詢數組內同一條記錄同時滿足2個條件的語句:

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

查詢結果是:

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

可以看到, 其執行結果是, 對數組內的每一個子元素, 執行 $elemMatch 匹配, 可以進行多個條件的匹配。

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

數組整體能滿足以下2個條件:

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

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

查詢結果是:

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

可以看到, 其執行結果是, 對數組進行匹配, 其中需要有子元素 滿足 "qList.qid": 1, 還需要有子元素 滿足 "qList.qid": 1, , 適合進行單個條件的匹配。

如果是單個條件匹配, 則以下方式結果是一樣的。

{ "qList.qid": 1}

或者

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

查詢的結果都是2條記錄。

看完上述內容,你們掌握怎么在MongoDB中對數組中的元素進行查詢的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女