#node.js #mongodb #mongoose
Вопрос:
Здравствуйте, я хочу знать, возможно ли выполнить запрос для получения документов, подобных этому
Документ
[
{
...
id:1
tags:['a', 'b', 'c']
...
},
{
...
id:2
tags:['b', 'c']
...
},
{
...
id:3
tags:['d']
...
}
]
findone({tags:{$all:['a', 'b']}})
-> 1, потому что a и b указаны только в документе doc 1
findone({tags:{$all:['b']}})
-> 1, 2, потому что b указаны только в документе doc 2
findone({tags:{$all:['a', 'b', 'd']}})
-> ничего, потому что любой документ имеет все теги внутри массива
findone({tags:{$all:['d']}})
-> 3, потому что d есть только в документе 3
Есть ли какой-либо способ сделать этот запрос?
Спасибо
Ответ №1:
Запрос
- Вы можете использовать
$setDifference
- если пусто (установите различие your_array «$tags») => теги содержат все элементы, а фильтр имеет значение true
aggregate(
[{"$match":
{"$expr":
{"$eq": [{"$setDifference": [["a", "b", "d"], "$tags"]}, []]}}}])