我有一个包含四个文件的集合
{_id:as1d2a1das2d1afdfd, content:{ name: 'John'} }
{_id:sdasd512a12asdad, content:{ sub: {name:'John'}}}
{_id:sdaasddasdassd512a12, content:{ sub: {sub1:{name:'John'}}}}
{_id:sdaasddasdassd512a12, content:{ sub: {sub1:{name:'Terry'}}}}
我可以使用哪个查询来查找名称属性等于“John”的元素的所有文档?
答案 0 :(得分:0)
现在
MongoDB find()
仅限于one document level
,您可以使用cursor
通过自己的迭代扩展此功能,并应用programming logic
来实现所需的解决方案。
在以下网址找到更多信息:
答案 1 :(得分:0)
为此,您必须迭代光标返回的每个项目并“手动”遍历每个文档。
这不是一个mongo查询!请注意,我的实际查询为空find()
。
我在这里所做的只是迭代结果并过滤掉不相关的结果。
var results = [];
db.data.find().forEach( function( doc ){
if ( find_name_recursive( doc ) ){
results.push( doc );
}
});
function find_name_recursive( doc ) {
for ( var attr in doc ) {
if ( doc.name != "undefined" && doc.name == "John" ){
return true;
}
if ( doc[ attr ] !== null && typeof( doc[ attr ] ) == "object" ) {
// drill down deeper into the object
find_name_recursive( doc[ attr ] );
}
}
}
请注意,这不是经过测试的代码(此机器上没有mongo)。大多数递归搜索函数都来自这篇文章 - Traverse all the Nodes of a JSON Object Tree with JavaScript
参考文献 -