Поиск документов по массиву DBRefs
решение, вероятно, смотрит мне в лицо, но мне не повезло найти его. Моя проблема в том, что мне нужно найти все документы, которые содержат указанный 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
может не содержать DBRefs, другие могут содержать 1, а другие могут содержать более 1).
как это свершилось?
2 ответов
Я бы рекомендовал сбрасывать DBRef
s в пользу простого хранения _id
ссылочного документа, предполагающего, что вы знаете имя ссылающейся коллекции.
нет абсолютно никакого способа "разрешить" массив 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"
}
затем вы можете запросить MongoDB, используя содержимое
попробуйте это, это сработало для меня:
db.<your collection>.find({"a_list_of_dbrefs.$id": ObjectID("4e2d48ab580fd602eb000004")})
вы также можете получить все элементы, которые имеют ссылку на коллекцию:
db.<your collection>.find({"a_list_of_dbrefs.$ref": "somecollection"})