- A+
前言
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下依据数组年夜小进行查询的办法mongodb 数据类型(null/字符串/数字/日期/内嵌文档/数组等)mongoDB 多重数组查询(AngularJS绑定显示 nodejs)