MongoDB: вложенный запрос с массивами и его производительность
У меня есть 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 ответа
Вам придется запросить MongoDB дважды, так как у вас нет возможности присоединиться. Вам придется сделать это на уровне приложения. Если вы можете денормализовать, сделайте это. Получите необходимые данные во встроенном документе, чтобы вы могли выполнить только один запрос.
Я думаю, что @Eamonn прав, что вам не нужно делать запросы по БД.
Хорошо, я не уверен, что я точно понимаю, что вы пытаетесь сделать из вашего описания. Но я не понимаю, почему вы будете запрашивать данные по БД, мне кажется, что это очень тяжело, почему вы не можете хранить оба набора данных в одном БД. Вы всегда можете отделить позже, если требуется? Я не уверен, что это решит вашу расплывчатую проблему, но это было бы хорошим началом.
удачи.