MongoDB фильтр запросов массив объектов и формат возвращаемого объекта - PullRequest
0 голосов
/ 30 января 2019

У меня есть такая коллекция MongoDB:

{
    "_id" : "course1",
    "teams" : [ 
        {
            "key" : "1548600639880X5269760768997986",
            "title": "Team One",
            "members" : {
                "user1" : true
            }
        }, 
        {
            "key" : "1548601941683X14679065888073906",
            "title": "Team Two",
            "members" : {
                "user2" : true,
                "user3" : true
            }
        }, 
        {
            "key" : "1548602385020X41594057288000386",
            "title": "Team Three",
            "members" : {
                "user4" : true
            }
        }
    ],
    "updated_at" : "2019-01-27T15:31:43+00:00"
}

Я пытаюсь получить «команду» user2 со всеми пользователями со значением true.Таким образом, возвращаемый объект должен выглядеть примерно так:

 {
     "key" : "1548601941683X14679065888073906",
     "title": "Team Two",
     "members" : {
         "user2" : true,
         "user3" : true
     }
  }

Я много пробовал с db.getCollection (''). Find ({}), но не получил нужного результата.

Ответы [ 2 ]

0 голосов
/ 31 января 2019

Вам необходимо использовать агрегацию .И ниже агрегация поможет вам.

db.getCollection (''). Find ({}) не может быть преобразовано в результат желания.

db.getCollection('collection').aggregate([
    { $unwind: "$teams" },
    { $match: {"teams.members.user2": true } },
    { $replaceRoot: { newRoot: "$teams" }  } 
])
0 голосов
/ 30 января 2019
db.getCollection('teams').find({
    "_id": "course1",
    "teams.members": { "user1": true }
})

получает меня

{
    "_id" : "course1",
    "teams" : [ 
        {
            "key" : "1548600639880X5269760768997986",
            "title" : "Team One",
            "members" : {
                "user1" : true
            }
        }, 
        {
            "key" : "1548601941683X14679065888073906",
            "title" : "Team Two",
            "members" : {
                "user2" : true,
                "user3" : true
            }
        }, 
        {
            "key" : "1548602385020X41594057288000386",
            "title" : "Team Three",
            "members" : {
                "user4" : true
            }
        }
    ],
    "updated_at" : "2019-01-27T15:31:43+00:00"
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...