Node.js 查找具有$or运算符和两个嵌套$in条件的对象
我正在尝试使用Mongoose构建一个查询,以查找对象的关键字是否在关键字列表中,或者其Node.js 查找具有$or运算符和两个嵌套$in条件的对象,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,我正在尝试使用Mongoose构建一个查询,以查找对象的关键字是否在关键字列表中,或者其artistName是否在artistName列表中。我可以使用一个或其他搜索条件,但不能同时使用两个 这是我的密码: Artwork.find({ $or: [{ artworkKeywords: { $in: keywordArray}, _p_artist: {$in: artistArray}}]}). limit(50). sort({_updated_
artistName
是否在artistName
列表中。我可以使用一个或其他搜索条件,但不能同时使用两个
这是我的密码:
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”]
和artistaray=[“Joe Shmoe”]
我正按照MongoDB的指示行事。我没有得到任何语法错误,但我确实得到了正在抛出的ARTWORK NOT FOUND
异常
按艺术家姓名搜索效果很好:
Artwork.find({ _p_artist: {$in: artistArray}})
Artwork.find({
artworkKeywords: {
$in: keywordArray}
因此,仅搜索关键字也很有效:
Artwork.find({ _p_artist: {$in: artistArray}})
Artwork.find({
artworkKeywords: {
$in: keywordArray}
但不能与或子句一起使用!我做错了什么?你的语法错了。或“任一”表示“单独文件”。您将所有查询放入“一个文档”
因此,不同文件的“列表”是“或”的论据。你写的也可能是:
Artwork.find({
artworkKeywords: { $in: keywordArray },
_p_artist: { $in: artistArray }
})
因为这基本上是列表中的“一个元素”,所以它是一个“AND”条件,而不是“OR”。谢谢。但坦率地说,我不明白你的答案。您说您将不同文档的列表传递给$或
的参数。但是在我链接的教程页面中,参数不是不同的文档:db.inventory.find({$or:[{quantity:{$lt:20}},{price:10}]})
<代码>价格
和数量
是同一对象的不同属性。所以我不知道如何开始修复我的代码。@YuChen您缺少的是“计算括号”。文档示例[{“数量”:{..}、{“价格”:..}]
中有两个文档。那是1。作为{“数量”:{..}
。二,<代码>{“价格”:..}。您试图在$或中使用一个,但这“不起作用”,正如我所解释的。这不是理解实际运行查询语句并看到它工作的最简单的方法吗?谢谢。我现在明白你的意思了。我没有运行查询,因为我看不出您编写的内容和答案代码之间有什么区别。@YuChen当您得到“有用的解释性答案”时,您也可能会在这里发现该函数,如。。。你的日常活动中可能出现了一些遗漏。你是指我对你的答案进行表决吗?接受你的答案不是一个很好的指标,我觉得它很有用吗?