共计 2002 个字符,预计需要花费 6 分钟才能阅读完成。
自动写代码机器人,免费开通
怎么在 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 中对数组中的元素进行查询的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注丸趣 TV 行业资讯频道,感谢各位的阅读!
向 AI 问一下细节