MongoDB запрашивает массив для точного соответствия элемента, но может быть не в порядке - PullRequest
4 голосов
/ 29 мая 2011

У меня есть документ в MongoDB, который выглядит следующим образом:

{ users: ["2", "3", "4"] }

Я пытаюсь запросить этот документ, сопоставив массив пользователей.

db.things.find( { users: { $all: [ "2", "3", "4" ] } } )

Этот запрос работает, но также возвращает этот документ:

{ users: ["2", "3", "4", "5"] }

Последнее требование - иметь возможность запрашивать массив пользователей с элементами не по порядку, скажем, [ "3", "4", "2" ] в запросе, и он сможет вернуть мой первый документ в списке.

Любая помощь будет принята с благодарностью. Заранее спасибо.

Я также использую mongoid, если у него есть помощник, о котором кто-то знает, но он может делать прямой запрос на монго, если мне нужно.

Ответы [ 2 ]

10 голосов
/ 29 мая 2011

Вы можете объединить ваш запрос с предложением {users: {$ size: 3}} и настроить размер в соответствии с количеством пользователей, которых вы запрашиваете. Это обеспечит получение точного набора, а не подмножества.

Если элементы вышли из строя, вам может потребоваться сделать {users: {$ существующие: "1"}} для каждого и объединить их и предложение $ size вместе.

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

Этот ответ неверен.

, чтобы запросить у документа точные совпадения в массиве, сделайте это.

db.things.insert({a:[1,2]});

db.things.insert({a:[1,2,3]});

db.things.find({a:[1,2]});

returns {a:[1,2]}

Надеюсь, это поможет - это так очевидно, что его нет в документах

...