我正在尝试制作一个复杂的mongo查询,经过数小时的试用,只有错误,我来这里寻求帮助。
提供以下文件:
{
// Item 1
name: 'Tranças Nordestinas',
author: 'Daiane Rosa',
ingredients: [
'wheatFlour',
'sugar',
'butter',
'bakingPowder',
'eggs'
]
}
{
// Item 2
name: 'Brigadeiro de Churros',
author: 'Cristine Russel',
ingredients: [
'sugar',
'chocolate'
]
}
{
// Item 3
name: 'Chá Mate Gelado',
author: 'Victor Onofre',
ingredients: [
'sugar',
'water'
]
}
{
// Item 4
name: 'Macarrão Verde ao Molho',
author: 'Victor Onofre',
ingredients: [
'greenPasta',
'tomatoSauce',
'butter'
]
}
如果我查询数组['sugar','water'],则只返回第三项。
如果我查询数组['water','chocolate','wheatFlour','sugar','butter','bakingPowder','eggs'],则应退回第1,2和3项。
如果我查询数组['sugar'],则不应返回任何项目。
无法找到执行此类查询的方法。 不知道mongodb是否是正确的选择,在这种情况下mysql会表现得更好吗?
感谢。
答案 0 :(得分:1)
您可以尝试$redact
$setIsSubset
来查询。
$setSubset
将成分数组与输入数组进行比较,并在成分数组是输入数组的子集时返回true
,其中包含等于,而$redact
将使用来自以上比较;要保留的true
值和false
值才能删除文档。
db.collection.aggregate(
[{
$redact: {
$cond: {
if: {
$setIsSubset: ["$ingredients", ['sugar']]
},
then: "$$KEEP",
else: "$$PRUNE"
}
}
}]
);