Как запустить этот запрос в mongodb? - PullRequest
1 голос
/ 09 ноября 2009

В моем документе есть поле массива Ключи

Ключи1 и Ключи2 - это два массива

Я хочу получить все документы, где Ключи содержат любое значение в Ключи1 И любое значение в Ключи2

1 Ответ

3 голосов
/ 10 ноября 2009

Отличного способа представить этот запрос пока нет (по состоянию на 1.1.2) - если вы спросите в списке или подадите запрос на добавление функции, мы можем попытаться что-то приготовить.

На данный момент лучше всего использовать $ in в запросе для выполнения половины работы:

db.test.find({keys: {$in: Keys1}})

Вы можете сделать это в комбинации с $ where, который может выполнять часть Keys2 (но не будет использовать индекс - поэтому лучше использовать как можно больше с обычным синтаксисом запроса). Это будет выглядеть примерно так:

db.test.find({keys: {$in: Keys1}, $where: "for (i in this.keys) { for (j in Keys2) { if (this.keys[i] == Keys2[j]) return true;}} return false;"})

В последних версиях mongodb 2.6+ вы можете сделать это с помощью $ и оператора.

db.test.find({$and:[{keys: {$in: Keys1}},{keys: {$in: Keys2}}]})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...