neo55
@neo55
junior

Как отфильтровать массив в коллекции?

Всем привет у меня есть коллекция:
{
   "_id" : 2,
   "name" : "bob",
   "age" : 42,
   "mess" : [ { "text" : 'hi', "countT" : 8 }, { "text" : 'no', "countT" : 20 } ]
}
{
   "_id" : 3,
   "name" : "ahn",
   "age" : 22,
   "mess" : [ { "text" : 'no', "countT" : 8 }, { "text" : 'hi', "countT" : 8 }, { "text" : 'no', "countT" : 20 } ]
}
{
   "_id" : 6,
   "name" : "abc",
   "age" : 43,
   "mess" : [ { "text" : 'good', "countT" : 8 }, { "text" : 'no', "countT" : 20 }, { "text" : 'good', "countT" : 8 }, { "text" : 'no', "countT" : 20 } ]
}


Мне нужно вывести из элемента с "_id" = 6 все элементы из поля "mess" где "mess.text" = 'good'
  • Вопрос задан
  • 180 просмотров
Пригласить эксперта
Ответы на вопрос 1
Если я правильно вас понял то думаю это вам подойдет
db.test.aggregate([{$match : {_id : 6}}, {$redact : {$cond : {if : {$eq : ["$text", "no"]}, then : '$$PRUNE', else : '$$DESCEND'}}}])
,
результат :
{ "_id" : 6, "name" : "abc", "age" : 43, "mess" : [ { "text" : "good", "countT" : 8 }, { "text" : "good", "countT" : 8 } ] }
или так
db.test.aggregate([{$match : {_id : 6}}, {$redact : {$cond : {if : {$eq : ["$text", "no"]}, then : '$$PRUNE', else : '$$DESCEND'}}}, {$project : {mess : 1, _id : 0}}])

результат :
{ "mess" : [ { "text" : "good", "countT" : 8 }, { "text" : "good", "countT" : 8 } ] }
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы