通过DBRef数组查找文档



解决方案可能正摆在我面前,但我没有找到它。我的问题是,我需要找到所有包含指定DBRef的文档。以下是要搜索的集合的结构:

{
    "_id" : ObjectId("4e2d4892580fd602eb000003"),
    "date_added" : ISODate("2011-07-25T11:42:26.395Z"),
    "date_updated" : ISODate("2011-07-25T11:43:09.870Z"),
    ...
    "a_list_of_dbrefs" : [
        {
            "$ref" : "somecollection"
            "$id" : "4e2d48ab580fd602eb000004"
        }
    ],
    ...
    "name" : "some name"
}

我需要能够基于出现在a_list_of_dbrefs中的DBRef检索一组文档(一些a_list_of_dbrefs可能不包含DBRef,其他可能包含1,而其他可能包含多个DBRef(。

这是如何实现的?

试试这个,它对我有用:

db.<your collection>.find({"a_list_of_dbrefs.$id": ObjectID("4e2d48ab580fd602eb000004")})

您还可以检索所有引用到集合的元素:

db.<your collection>.find({"a_list_of_dbrefs.$ref": "somecollection"})

我建议转储DBRef,而不是简单地存储被引用文档的_id,假设您知道被引用集合的名称。

在MongoDB上,绝对没有办法从服务器端(一步到位("解析"DBRef的数组,并且需要在客户端上循环遍历数组并单独解析每个文档。

相反,如果只存储引用的_id的数组,则可以检索该数组,然后使用$in查询来获取所有数组。

所以你的文档可能会变成这样:

{
    "_id" : ObjectId("4e2d4892580fd602eb000003"),
    "date_added" : ISODate("2011-07-25T11:42:26.395Z"),
    "date_updated" : ISODate("2011-07-25T11:43:09.870Z"),
    ...
    "references": [
        ObjectId(123), ObjectId(234), ObjectId(567), ObjectId(891)
    ],
    ...
    "name" : "some name"
}

然后,您可以使用references字段的内容查询MongoDB:

db.somecollection.find({"_id": {"$in": references}})

相关内容

  • 没有找到相关文章

最新更新