Mongo通过嵌套文档数组搜索

时间:2019-02-28 09:23:39

标签: mongodb

我有一个mongo文档,如下所示,我希望能够进行两次搜索:

1)搜索id = 123 2)搜寻id = 1234的小马

所以我需要的文档可以是顶层文档或嵌套文档。

{
   "id": "123",
   "name" : "testName",
   "docs": [
   {
   "id": "1234",
   "name" : "testName4",
   "docs": []
    }
   ]
}

所以基本上我可能需要顶层文档或嵌套文档。我正在查看图形查找,但我认为这不会满足我的需要,我还查看了聚合-似乎它们可以工作?

1 个答案:

答案 0 :(得分:2)

您能说明一下结果如何吗?

如果您要搜索ID为“ 123”的文档,或者要在ID为“ 1234”的“ docs”中包含文档,则只需查询以下内容:

db.teststack.find({$or: [{"id": "123"}, {"docs.id": "1234"}]})

,它将始终返回完成文档。

编辑

请参见我编写的以下示例:

db.teststack.mapReduce(
function(){
    let scanfunction = (passobj) => {
        if(passobj.id === "123") {
            emit("id123", this._id);
        }
        else {
            for(var key in passobj) {
                if(typeof passobj[key] === "object"){
                    scanfunction(passobj[key]);
                }
            }
        }
    }

    scanfunction(this);
}
,
function(key, stuff){
let ret = "";
for(let t1 in stuff)
ret += stuff[t1] + ";";
return ret;
}
,
{
"out": "keys"
}
).find()

它只是返回一个包含所有ObjectId的字符串

  • a:id为“ 123”
  • b:包含ID为“ 123”的文档
  • c:包含一个包含文档的文档...。其中至少一个文档具有ID:“ 123”

该代码具有可扩展性,因为它可以扫描数据库中所有文档的所有键,但因此性能不佳!