我尝试使用Mongoose构建查询,以查找对象,如果其关键字位于关键字列表中,或者artistName
位于artistNames
列表中。我可以让一个或另一个搜索条件起作用,但不是两个都可以!
这是我的代码:
Artwork.find({ $or: [{
artworkKeywords: {
$in: keywordArray}, _p_artist: {$in: artistArray}}]}).
limit(50).
sort({_updated_at : -1}).then((artworks) =>{
if (isEmptyObject(artworks)){
throw ARTWORK_NOT_FOUND;
}
return res.send(artworks);
})
我已经转入keywordArray = ["photography"]
和artistArray =["Joe Shmoe"]
。
我遵循MongoDB tutorial on the logical operator的确切指示。我没有收到任何语法错误,但我确实会抛出ARTWORK NOT FOUND
个异常。
按艺术家名字搜索效果很好:
Artwork.find({ _p_artist: {$in: artistArray}})
仅搜索关键字也很有效:
Artwork.find({
artworkKeywords: {
$in: keywordArray}
但不能同时使用or
条款!我在这里做错了什么?
答案 0 :(得分:2)
你的语法错了。 $or
或"要么"表示"单独的文件"。您将所有查询放入"一个文档" which means "AND"
Artwork.find({
$or: [
{ artworkKeywords: { $in: keywordArray } }, // each separate
{ _p_artist: { $in: artistArray } } // just like separate queries
]
})
所以"列表"不同的文件是" OR"的论据。你写的也可能是:
Artwork.find({
artworkKeywords: { $in: keywordArray },
_p_artist: { $in: artistArray }
})
因为那基本上是你的一个元素"在列表中,所以它是单个" AND"条件而不是" OR"。