MongoDB: найти в массиве объектов, где элементы имеют только одно значение - PullRequest
0 голосов
/ 27 мая 2020

Данные выглядят следующим образом:

{
    "_id" : ObjectId("5ae9f2188857ce20f516315c"),
    "meta" : {
        "participants" : [ 
            {
                "gender" : [ 
                    {
                        "text" : "weiblich",
                        "id" : "LABEL.FEMALE"
                    }
                ]
            }, 
            {
                "gender" : [ 
                    {
                        "text" : "männlich",
                        "id" : "LABEL.MALE"
                    }
                ]
            }, 
            {
                "gender" : [ 
                    {
                        "text" : "weiblich",
                        "id" : "LABEL.FEMALE"
                    }
                ]
            }
        ]
    }
}

{
    "_id" : ObjectId("5af00e1070bb5a707634cb12"),
    "meta" : {
        "participants" : [ 
            {
                "gender" : [ 
                    {
                        "text" : "männlich",
                        "id" : "LABEL.MALE"
                    }
                ]
            }, 
            {
                "gender" : [ 
                    {
                        "text" : "männlich",
                        "id" : "LABEL.MALE"
                    }
                ]
            }
        ]
    }
}

{
    "_id" : ObjectId("5af1ef01cfd317006694a6e6"),
    "meta" : {
        "participants" : [ 
            {
                "gender" : [ 
                    {
                        "text" : "weiblich",
                        "id" : "LABEL.FEMALE"
                    }
                ]
            }, 
            {
                "gender" : [ 
                    {
                        "text" : "weiblich",
                        "id" : "LABEL.FEMALE"
                    }
                ]
            }
        ]
    }
}

Итак, meta.participants содержит некоторые элементы с разными свойствами, например, gender with также является массивом из одного элемента (не спрашивайте, history c причины; это всегда один элемент, никогда не два и никогда не бывает пустым).

Мне нужен запрос, который возвращает документы, содержащие только участников-мужчин (второй do c 5af00e1070bb5a707634cb12).

Я уже попытал счастья, но не могу понять.

Эти запросы дают мне все до c с участником-мужчиной:

{'meta.participants.gender.id': 'LABEL.MALE'}
{'meta.participants.gender': { $elemMatch: {id: 'LABEL.MALE'}}}

Эти запросы дают мне 0 результаты ..

{'meta.participants.gender': {id: 'LABEL.MALE'}}
{'meta.participants.gender[0]': { $elemMatch: {id: 'LABEL.MALE'}}}

Ответы [ 2 ]

0 голосов
/ 28 мая 2020

Запрос на получение документов с полем gender.id не имеет LABEL.FEMALE.

db.test.find( { "meta.participants.gender.id": { $ne: "LABEL.FEMALE" } } )

Таким образом, вам не нужно использовать $elemMatch для Single Query Condition (но это не ошибка и результаты будут одинаковы).

0 голосов
/ 27 мая 2020

Попробуйте следующее:

db.collection.find({
  "meta.participants": {
    "$not": {
      "$elemMatch": {
        "gender.id": {
          "$nin": [
            "LABEL.MALE"
          ]
        }
      }
    }
  }
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...