Arrays MongoDB在具有多个嵌套级别的数组和对象中查找
我尝试匹配此嵌套结构中的文档,它适用于一个级别,但不适用于第二个级别:Arrays MongoDB在具有多个嵌套级别的数组和对象中查找,arrays,mongodb,nested,Arrays,Mongodb,Nested,我尝试匹配此嵌套结构中的文档,它适用于一个级别,但不适用于第二个级别: { type:"example" level1:[ { name:"Bill" level2:[ { skill:"gardening" },
{
type:"example"
level1:[
{
name:"Bill"
level2:[
{
skill:"gardening"
},
{
skill:"carpentry"
}
]
},
{
name:"John"
level2:[
{
skill:"painting"
},
{
skill:"acrobatics"
}
]
}
]
}
我可以匹配第一级数组,例如:
db.collection.find({"level1.name":{$eq:"Bill"}})
但是,例如,如果我想用等于“acrobatics”的技能字段对文档进行数学计算,我会:
没用,你知道吗?
(如果示例的命名没有多大意义,那么很抱歉,但这就是我面临的结构)
谢谢大家! 有多种方法可以做到这一点。你可以试试这样的
$unwind
展开一级阵列$match
以匹配所需的元素$group
分组回同一级别[
{
"$unwind": "$level1"
},
{
$match: {
"level1.level2.skill": "acrobatics"
}
},
{
"$group": {
_id: "$_id",
level1: {
"$addToSet": "$level1"
}
}
}
]
工作有多种方法可以做到这一点。你可以试试这样的
$unwind
展开一级阵列$match
以匹配所需的元素$group
分组回同一级别[
{
"$unwind": "$level1"
},
{
$match: {
"level1.level2.skill": "acrobatics"
}
},
{
"$group": {
_id: "$_id",
level1: {
"$addToSet": "$level1"
}
}
}
]
工作工作正常你的问题是什么?查询不起作用,或者结果中需要整个结构?您可以先更新您的问题。它将返回整个结构,因为集合中只有一个文档与查询匹配。@Mapin您可以使用
$
在“查找”中进行项目检查@varman是的,您是对的,这仅在唯一值中有用,对于多个匹配,唯一的选择是聚合。它确实有效。您的问题是什么?查询不起作用,或者结果中需要整个结构?您可以先更新您的问题。它将返回整个结构,因为集合中只有一个文档与查询匹配。@Mapin您可以使用$
在“查找”中进行项目检查@varman是的,您是对的,这仅在唯一值中有用,对于多个匹配,唯一的选项是聚合。谢谢,我还必须使用管道进行快速分类:)这样您就可以轻松地使用$match
阶段。@varman您可以使用$push
而不是$addToSet
,因为$addToSet
将替换相同的对象,谢谢,我还必须使用管道来快速分类:)这样您就可以轻松地使用$match
阶段。@varman您可以使用$push
而不是$addToSet
,因为$addToSet
将替换相同的对象,看