8

解决方案可能正盯着我看,但我没有找到它的运气。我的问题是我需要找到所有包含指定 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"
}

我需要能够根据出现的 DBRef 检索一组文档a_list_of_dbrefs(有些a_list_of_dbrefs可能不包含 DBRef,其他可能包含 1 个,而其他可能包含超过 1 个)。

这是如何实现的?

4

2 回答 2

20

试试这个,它对我有用:

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

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

db.<your collection>.find({"a_list_of_dbrefs.$ref": "somecollection"})
于 2013-03-30T04:25:44.713 回答
2

假设您知道被引用的集合的名称,我建议转储DBRefs 以简单地存储_id引用文档的 s。

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

相反,如果您存储一个仅包含引用的数组,_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}})
于 2011-07-27T16:01:21.847 回答