Как нам найти записи, в которых несколько условий выполняются в одном и том же поддокументе, хотя хотя бы одно из этих условий отменено?
db.getCollection('clients').find( {
data: { '$exists': true },
'data.updates': { '$elemMatch': {
name: { $not: /^KB3109103/i },
install_date: { $gt: 128573812 }
} }
});
Возвращает все записи, поскольку $not
не делает 'Кажется, что он работает внутри $elemMatch
.
Решение:
Нашли обходной путь, добавив $ и (который, согласно документации, такой же, как и без него) решил ее.
db.getCollection('clients').find( {
data: { '$exists': true },
'data.updates': { '$elemMatch': {
$and: [
{name: { $not: /^KB3109103/i }},
{install_date: { $gt: 128573812 }}
]
} }
});