MongoDb находит операцию во вложенном массиве, имеющем в нем несколько объектов json - PullRequest
0 голосов
/ 29 мая 2020

У меня есть набор данных, в котором json состоит из массива, содержащего несколько json.

Объекты в массиве имеют 4 ключа, из которых 1 отсутствует в некоторых из них.

Я хочу получить документы, в которых у всех объектов в массиве отсутствует ключ.

например, из следующих документов:

{"test":1,desc:[{"price":1,"abc":"def"},{"price":2,"ac":"def"}]}
{"test":1,desc:[{"price":1,"abc":"def"},{"ac":"def"}]}
{"test":1,desc:[{"abc":"def"},{"ac":"def"}]}

Я хочу сопоставить только последний документ.

Заранее спасибо ..

Ответы [ 2 ]

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

Добился этого, просто создал скрипт, в котором я использовал массив для хранения цены, а затем использовал каждый метод для определения цены, он вернул мне желаемый результат, который я хочу.

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

Вы можете просто использовать $ exists :

db.collection.find(
    {
        "desc.price": {$exists: false}
    }
)

И если вы хотите и для других полей:

db.collection.find(
    {
        $or: [
            {
                "desc.price": {$exists: false}
            },
            {
                "desc.abc": {$exists: false}
            },
            {
                "desc.ac": {$exists: false}
            }
        ]
    }
)

Следует отметить, что пустой массив, т.е. desc = [] всегда будет соответствовать этому запросу. если вы хотите убедиться, что есть хотя бы один объект, используйте этот запрос:

db.collection.find(
    {
       $and: [
           {
               "desc.price": {$exists: false}
           },
           {
               "desc.0": {$exists: true}
           }
       ]
    }
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...