У меня есть объект со столбцом chars
с такими данными:
{
"chars": [
{
"count": 1,
"color": "red"
},
{
"count": 2,
"color": "green"
},
{
"count": 3,
"color": "blue"
}
]
}
Я хочу исключить записи с лайком chars
{"count": 2, "color": "blue"}
Я фильтрую по (demo1)
{
"$or": [
{
"chars.count": {
"$ne": 2
}
},
{
"chars.color": {
"$ne": "blue"
}
}
]
}
или (demo2)
{
"chars.count": {
"$ne": 2
},
"chars.color": {
"$ne": "blue"
}
}
Я хочу получить объект, но получаю пустой набор.
Я использую MongoDB 6.0.6.
🤔 А знаете ли вы, что...
MongoDB обладает активным сообществом разработчиков и богатой документацией...
Ваш запрос должен быть таким
"$or": [
{ "chars.count": { "$ne": 2 } },
{ "chars.color": { "$ne": "blue" } }
]
Я думаю, что вам нужно использовать оператор запроса $elemMatch для сопоставления документов, в которых есть элемент массива, содержащий { count: 2, color: "blue" }
, и просто инвертировать результаты с помощью $not
. Это вернет все несовпадающие документы, и я думаю, что это то, к чему вы стремитесь:
db.collection.find({
chars: {
$not: {
$elemMatch: {
count: 2,
color: "blue"
}
}
}
})
Рабочий пример смотрите ЗДЕСЬ.