我的documents
collection
与foo
相似。这些documents
可以有一个嵌套的parent
对象,也可以有一个嵌套的parent
对象等等。
foo: {
caption: "Italian",
code: "",
id: 17,
parent: {
caption: "Restaurants",
code: "",
id: 9,
parent: {
caption: "Food and Drink",
code: "food_and_drink",
id: 1,
parent: ""
}
}
};
如何在foo.parent.id
及其所有嵌套parent
对象(如果有)中搜索数学?我应该使用$in
吗?递归?
答案 0 :(得分:1)
您可以为方法find(...)
提供一个自定义函数,该函数将检查嵌套级别。
db.collection.find(
function () {
var findKey = "find-this",
findVal = "please find me";
function inspectObj(doc) {
return Object.keys(doc).some(function(key) {
if ( typeof(doc[key]) == "object" ) {
return inspectObj(doc[key]);
} else {
return ( key == findKey && doc[key] == findVal );
}
});
}
return inspectObj(this);
}
)
StackOverflow: How to find MongoDB field name at arbitrary depth
答案 1 :(得分:0)
是的,你必须使用递归,下面的代码对你非常有帮助,试试这个
db.getCollection('foo').find().
forEach(function(x) {
function t(x){
if (x.parent) {
t(x.parent);
} else {
print(x.caption);
}
}
t(x)
});
您将获得所有文档的最后一个父级,并获取该父级的任何字段而不是标题
我使用了caption
如果上面的代码无效,请进行一些小改动
if(x.parent != "") instead of if(x.parent)