MongoDB: вложенный запрос с массивами и его производительность - PullRequest
0 голосов
/ 07 октября 2011

У меня есть 2 коллекции на 2 отдельных БД.Оба хранят поле массива.Я планирую запросить оба сразу, так что:

Все документы коллекции 1, которые имеют элементы [A, B] в своем поле массива и их _ids, присутствуют в поле массива коллекции 2 с определенным документом _id.

Например:

документы (коллекция 1, БД 1):

[{"_id":ObjectId("doc1"), "array1":["A","B"]}, {"_id":ObjectId("doc2"), "array1":["A","C"]}]

user_docs (коллекция 2, БД 2):

[{"_id":ObjectId("usr1"), "array2": [ObjectId("doc1"),ObjectId("foo")]}, {"_id":ObjectId("usr2"), "array2": [ObjectId("bar"),ObjectId("baz")]}]

Мне нужен запрос, который дает A, B и usr1, возвращает объект 'doc1' (потому что он имеет A, B в своем поле array1 и usr1 имеет его в своем поле array2).

Я, очевидно, могу получить все документы с A, B в одном запросе и все документы usr1 в другом запросе и найти общие элементы на уровне приложения, но есть ли лучший способ сделать это с помощью MongoDB?

Спасибо заваша помощь.

Ответы [ 2 ]

0 голосов
/ 08 октября 2011

Вам придется дважды запрашивать MongoDB, так как у вас нет возможности объединения.Вам придется сделать это на уровне приложения.Если вы можете денормализовать, сделайте это.Получите наличные необходимые данные во встроенном документе, чтобы вы могли выполнить только один запрос.

Я думаю, что @Eamonn прав, что вам не нужно выполнять запрос к БД.

0 голосов
/ 08 октября 2011

Хорошо, я не уверен, что я точно понимаю, что вы пытаетесь сделать из вашего описания.Но я не понимаю, почему вы будете запрашивать данные по БД, мне кажется, что это очень тяжело, почему вы не можете хранить оба набора данных в одном БД.Вы всегда можете отделить позже, если требуется?Я не уверен, что это решит вашу смутную проблему, но было бы неплохо начать.

best of Luck.

...