2015-05-19 5 views
1

У меня есть некоторые данные, такие какMongoDB как вернуть несколько данных в массиве

{"name":[{"age":15},{"age":18},{"age":20}]} 

Я хочу найти возраст более 17 лет, вот мой сценарий

db.test.find({"name.age":{"$gt":17}},{"name.age.$":1}) 

Это вернет

{"name":[{"age":18}]} 

Но я хочу получить все данные более 18

Как улучшить скрипт?

ответ

2

Одним из способов сделать это было бы использование оператора $redact.

  • Совпадение все записи, которые имеют, по меньшей мере, один вспомогательный документ в name массива, которые отвечают нашим критериям поиска.
  • Храните только эти вспомогательные документы в массиве name, которые соответствуют друг другу.

сниппет:

var minimumAge = 17; 
db.t.aggregate([ 
{$match:{"name.age":{$gt:minimumAge}}}, 
{$redact:{$cond:[ 
       {$gt:[{$ifNull:["$age",minimumAge+1]}, 
         minimumAge]}, 
         "$$DESCEND", 
         "$$PRUNE" 
         ] 
      } 

} 
]) 
Смежные вопросы