Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 查找具有$or运算符和两个嵌套$in条件的对象_Node.js_Mongodb_Mongoose - Fatal编程技术网

Node.js 查找具有$or运算符和两个嵌套$in条件的对象

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_

我正在尝试使用Mongoose构建一个查询,以查找对象的关键字是否在关键字列表中,或者其
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当您得到“有用的解释性答案”时,您也可能会在这里发现该函数,如。。。你的日常活动中可能出现了一些遗漏。你是指我对你的答案进行表决吗?接受你的答案不是一个很好的指标,我觉得它很有用吗?