解决方案可能正摆在我面前,但我没有找到它。我的问题是,我需要找到所有包含指定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}})