MongoDB 查找嵌套属性
MongoDB finding nested properties
所以我有一个结构如下的文档和模型
{
"name":"root",
"children":[
{
"_id":1,
"name":"A",
"children":[
{
"_id":2,
"name":"A child1",
"children":[
]
}
]
},
{
"_id":3,
"name":"B",
"children":[
{
"_id":4,
"name":"B child1",
"children":[
{
"_id":5,
"name":"B1 child1",
"children":[
{
"_id":6,
"name":"B1-1 child1",
"children":[
]
}
]
}
]
}
]
}
]
}
如果我想找到 children 的 A 或 B 的根我可以去
db.treeModel.find({'treeModel.children': 1}
db.treeModel.find({'treeModel.children': 3}
然而,它似乎不适用于单个节点的 children 的 ID。 mongo 或 mongoose 支持这个还是我缺少运算符?
您需要在路径中使用 _id(并省略“treeModel”),例如:
db.treeModel.find({'children._id': 1})
db.treeModel.find({'children._id': 3})
请记住,这仍将 return 整个父文档
mongo/mongoose 不支持直接在查找中进行递归嵌套文档查找。如果你有最大深度,你可以使用多个 $or 条件
db.treeModel.find({
$or: [
{ 'children._id': 1 },
{ 'children.children._id': 1 },
{ 'children.children.children._id': 1 },
]
});
否则对于递归嵌套,您可能需要重做数据结构以便可以使用 $graphLookup in an aggregation
所以我有一个结构如下的文档和模型
{
"name":"root",
"children":[
{
"_id":1,
"name":"A",
"children":[
{
"_id":2,
"name":"A child1",
"children":[
]
}
]
},
{
"_id":3,
"name":"B",
"children":[
{
"_id":4,
"name":"B child1",
"children":[
{
"_id":5,
"name":"B1 child1",
"children":[
{
"_id":6,
"name":"B1-1 child1",
"children":[
]
}
]
}
]
}
]
}
]
}
如果我想找到 children 的 A 或 B 的根我可以去
db.treeModel.find({'treeModel.children': 1}
db.treeModel.find({'treeModel.children': 3}
然而,它似乎不适用于单个节点的 children 的 ID。 mongo 或 mongoose 支持这个还是我缺少运算符?
您需要在路径中使用 _id(并省略“treeModel”),例如:
db.treeModel.find({'children._id': 1})
db.treeModel.find({'children._id': 3})
请记住,这仍将 return 整个父文档
mongo/mongoose 不支持直接在查找中进行递归嵌套文档查找。如果你有最大深度,你可以使用多个 $or 条件
db.treeModel.find({
$or: [
{ 'children._id': 1 },
{ 'children.children._id': 1 },
{ 'children.children.children._id': 1 },
]
});
否则对于递归嵌套,您可能需要重做数据结构以便可以使用 $graphLookup in an aggregation