参加此文件:
{
"targets": [
['a', 'b'],
['a']
]
}
我想用以下目标检索它:
['a', 'b']
['a']
['a', 'b', 'c'] //because one target contains 'a' and 'b'
而不是这个:
['b'] //because non of the targets contains only 'b'
我尝试使用此查询条件,但它根本不起作用:
'targets': {
'$elemMatch': {
'$elemMatch': { '$in': target }
}
}
答案 0 :(得分:1)
您可以使用以下查找查询。
db.collection.find({
targets: {
$elemMatch: {
$not: {
$elemMatch: {
$nin: input array
}
}
}
}
});
带有$elemMatch
的 $nin
选择具有targets
元素的所有文档至少有一个数组元素,输入数组中没有值匹配元素。
db.collection.find({
targets: {
$elemMatch: {
$elemMatch: {
$nin: input array
}
}
}
});
输入数组 - 选择
['a', 'b'] - false
['a'] - false
['a', 'b', 'c'] - false
['b'] - true
$not
选择targets
元素具有数组元素的文档,该数组元素是输入数组的子集。
db.collection.find({
targets: {
$elemMatch: {
$not: {
$elemMatch: {
$nin: input array
}
}
}
}
});
输入数组 - 选择
['a', 'b'] - true
['a'] - true
['a', 'b', 'c'] - true
['b'] - false