使用提供的查询考虑此NodeJS路由:
app.post("/api/test", async function(req, res) {
const findTags = ["banana", "produce", "yellow", "organic", "fruit"];
Product.find({
tags: {
$size: findTags.length,
$in: findTags
}
})
.sort({ date: "descending" })
.limit(20)
.exec(function(err, docs) {
console.log("Query found these products: ");
console.log(docs);
});
});
在我的MongoDB中,我有以下两个条目:
{
name: "Banana",
"tags": [
"banana",
" produce",
" yellow",
" organic",
" fruit"
]
},
{
name: "Blueberry",
"tags": [
"organic",
" produce",
" blue",
" blueberries",
" fruit"
]
}
我希望查询只返回Banana
实际结果:Banana
和Blueberry
都已退回。
所以我尝试用$in
替换$all
,而我得到的只是一个空数组。意思是它没有找到任何东西!这怎么可能?
我想要做的事情:我想查找至少所有Products
的所有findTags
。如果产品还有100个标签,只要它包含我正在寻找的所有标签,那就没关系。
如何更改查询以实现此目的?
答案 0 :(得分:1)
$all
不适合您,因为文档中的tags
与查询中的tags
不匹配。
某些tags
在文档中包含尾随空格(例如produce
)
答案 1 :(得分:-3)
你必须写这样的查询。而且您还必须从数据库中删除空格。或者用空格查询标签。
var tagsArr = ["banana", "produce", "yellow", "organic", "fruit"];
var query = {tags: {$all: tagsArr } };
Product.find(query).sort({ date: "descending" })
.limit(20)
.exec(function(err, docs) {
console.log("Query found these products: ");
console.log(docs);
});