2015-01-14 3 views
0

У меня есть коллекциязапроса элементы массива частности массив в MongoDB

{array:[1,2,3]}, 
{array:[1,2,4]}, 
{array:[2,1,2]} 

Как вернуть все объекты, где массив имеет

[1,2,*anyNumber] 

, чтобы получить результат

{array:[1,2,3]}, 
{array:[1,2,4]}, 
+1

Какой код у вас есть на данный момент? – Lizz

+0

Вы можете включить в свой вопрос, что вы пробовали до сих пор, чтобы мы могли сказать, почему код, который вы пробовали, не дает вам правильного результата. Вам нужно взглянуть на оператор запроса mordodb '$ in'. – BatScream

+0

спасибо, я пробовал $ all, но не работал – Tree

ответ

1

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

db.coll.find({"array.0": 1, "array.1": 2}) 

Однако, это также вернет документы, где нет ни одного элемента с индексом 3. Если вы хотите, чтобы третий элемент должен присутствовать, используйте:

db.coll.find({"array.0": 1, "array.1": 2, "array.2": {"$exists": true}}) 

Кроме того, это будет возвращать массивы, длина может быть больше чем 3. Если вы специально искали массивы, длина которых 3 только, то вы можете использовать $where, чтобы проверить длину

db.coll.find({"array.0": 1, "array.1": 2, "array.2": {"$exists": true}, $where:'this.array.length==3'}) 

Если это сложно, и вы просто ищете г где массив содержит 1 и 2 независимо от порядка и независимо от наличия третьего элемента, а затем просто используйте:

db.coll.find({"array": {"$all": [1,2]}}) 
+0

Этот ответ прекрасен. Именно то, что я искал! – Tree

Смежные вопросы