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

首頁 > 數據庫 > MongoDB > 正文

MongoDB如何對數組中的元素進行查詢詳解

2020-10-29 18:44:58
字體:
來源:轉載
供稿:網友

前言

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條記錄。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對武林網的支持。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 久草热久草视频 | 久久国产精品小视频 | 成人综合一区二区 | 久久亚洲精品久久国产一区二区 | 色播视频在线播放 | 欧日韩在线 | 天堂成人国产精品一区 | 精品国产三级a | 精品成人网 | 久久精品视频69 | 成人在线免费观看视频 | 成人做爰s片免费看网站 | 成人国产精品齐天大性 | 国产一级毛片国语版 | 久久国产夫妻视频 | 日韩精品一区二区三区中文 | 激情小说激情电影 | 色综av | 男女一边摸一边做羞羞视频免费 | 免费a网| 日本高清一级片 | 美国av在线免费观看 | 日本成人一区二区 | 美女污污视频在线观看 | 一级黄色电影网站 | 亚洲人成中文字幕在线观看 | 国产亚洲精品成人a | 在线a毛片免费视频观看 | 日本一区二区三区视频在线 | 狠狠操天天射 | 午夜精品福利在线观看 | av成人免费看 | 午夜丰满少妇高清毛片1000部 | 成人不卡一区二区 | 黄色片网站免费 | 黄色a级片免费观看 | 羞羞的网址 | 伊人999| 极色品影院 | 1级黄色毛片 | 中文字幕四区 |