Найти, если поле = "х" или заметили?MongoDB - PullRequest
0 голосов
/ 12 февраля 2019

Как мне найти записи, где:

"key1"="val1" and

1) if "key2" exists ->"key2"="val2"
2) if "key2" doesn't exist ignore it in search. Use only "key1"="val1"

Входные данные:

{id:1, key1: A}
{id:2, key1: B, key2: D}
{id:3, key1: B, key2: C}
{id:4, key1: B}

Запрос поиска key1 = B, key2 = C (если существует):

.find({'key1':B, {'key2':$exists{....}}})?

Результат должен быть:

[{id:3...},{id:4...}]

1 Ответ

0 голосов
/ 12 февраля 2019

Если вы используете версию с поддержкой монго, вы можете использовать оператор $in со значением null: { key1: val1, key2: {$in: [val2, null] }}.(Я знаю, что 3.6 поддерживает это, но я не уверен, когда он будет добавлен)

Вы также можете использовать оператор $ или: {key1: val1, $or: [{key2: val2}, {key2: {$exists: false}]}

https://docs.mongodb.com/manual/reference/operator/query/or/ https://docs.mongodb.com/manual/reference/operator/query/in

...