解决方案可能是盯着我看,但我找不到任何运气。我的问题是我需要找到包含指定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,其他可能包含1以上)
这是如何完成的?
答案 0 :(得分:17)
尝试这个,它对我有用:
db.<your collection>.find({"a_list_of_dbrefs.$id": ObjectID("4e2d48ab580fd602eb000004")})
您还可以检索具有ref集合的所有元素:
db.<your collection>.find({"a_list_of_dbrefs.$ref": "somecollection"})
答案 1 :(得分:1)
我建议转储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}})