Запрос mongodb для документов, имеющих поле, установленное в ноль, но исключая документы без поля - PullRequest
0 голосов
/ 15 января 2020

В настоящее время я экспериментирую с mongodb для mongoshell.

Я хочу получить документы со значением null для tomato.consensus. Следующий запрос соответствует документам 1991 года.

    db.movieDetails.find({"tomato.consensus": null}

Но одним из нежелательных побочных эффектов является то, что он также будет возвращать документы с полем не tomato.concensus и теми, у которых поле вообще не помидор.

Моя идея состояла в том, чтобы использовать oeprator $ существующие. Этот запрос возвращает 362 документа.

    db.movieDetails.find({"tomato.consensus": {$exists: true})

Моя первоначальная идея состояла в том, чтобы получить документы с полем tomato.consensus и затем обработать его, чтобы извлечь документы с помощью tomato.consensus: ноль. (что не работает):

    $db.movieDetails.find({"tomato.consensus": {$exists: true}}).find({"tomato.consensus": null})
    $uncaught exception: TypeError: db.movieDetails.find(...).find is not a function :

Существует ли синтаксис, позволяющий выполнять обе эти операции, чтобы избавиться от побочного эффекта в оболочке mon go?

Ответы [ 3 ]

1 голос
/ 15 января 2020

Вам просто нужен оператор $ и, чтобы определить несколько критериев фильтрации

db.movieDetails.find( { $and: [ {"tomato.consensus": { $exists: true } }, {"tomato.consensus": null } ] } )

Подробнее о $ и операторе и его примерах здесь .

1 голос
/ 15 января 2020

Вы действительно можете использовать $ exist в сочетании с $ и для извлечения документов, в которых "tomato.consensus" существует, а NULL:

db.movieDetails.find( { $and: [ { "tomato.consensus": null }, { "tomato.consensus": { $exists: true } } ] } )
0 голосов
/ 15 января 2020

Основное различие между null и undefined. Undefined всегда равен null, но в некоторых случаях null не является неопределенным.

Проверка undefined может быть выполнена несколькими способами:

1) {"tomato.consensus": { $exists: false } }

2) {"tomato.consensus": undefined }

Итак, для поиска нулевые значения, но не неопределенные, используйте запрос:

{'tomato.consensus': null, 'tomato.consensus': { $exists : true }}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...