Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.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 使用AND或OR在mongodb中搜索查询_Node.js_Mongodb - Fatal编程技术网

Node.js 使用AND或OR在mongodb中搜索查询

Node.js 使用AND或OR在mongodb中搜索查询,node.js,mongodb,Node.js,Mongodb,使用不同的查询参数搜索记录 数据 { "tags" : [ "salt", "tissue" ], "title" : "test 1", "category" : "food", "description" : "food details" "__v" : 0 }, { &qu

使用不同的查询参数搜索记录

数据

{
"tags" : [ 
    "salt", 
    "tissue"
],
"title" : "test 1",
"category" : "food",
"description" : "food details"
"__v" : 0
},
{
"tags" : [ 
    "sauce"
],
"title" : "test 2",
"category" : "food",
"description" : "sauce food 2"
"__v" : 0
}
问题

如果查询参数存在,如何根据查询参数获取结果

案例1如果查询参数为title=te&tags=salt,则结果应为2条记录

案例2 如果查询参数是tags=salt,那么它应该给出结果中的第一个文档

案例3 如果查询参数为title=test1,那么它应该给出结果中的第一个文档

案例4 如果查询参数为空,则应给出结果中的所有文档

我不知道谁应该在MongoDB中创建一个动态where子句

我正在使用下面的查询进行此操作,但该操作不起作用

let tags = req.query.tags ? req.query.tags : '' 
let title = req.query.title
if(tags || title){
query.find({
  $or: [
        { "title": new RegExp(title, "gi") },
        { "description": new RegExp(title, "gi") }
        ,
        { tags: {$in: tags.split(',')} }
      ]
  });
}


您可以在代码中使用相同的方法。

它对当前问题有效,但问题是如果我测试不同的情况,它就不起作用了。看看这个。在这种情况下,它应该给出2个结果。你的想法是什么?标题测试2存在于第二个文档中,salt包含在第一个文档中,那么为什么它会给出1个文档作为响应?你有
条件,这意味着所有条件都是真的。在第二种情况下,你没有盐。在这种情况下,我认为我们应该为查询创建一个动态子句。看这个我不明白。你可以在一个或多个条件下把这三个球都击垮。你能详细说明你的要求吗
db.collection.find({
  $and: [
    {
      $or: [
        {
          "title": {//Used regex syntax
            $regex: "te",
            $options: "gi"
          }
        },
        {
          "description": {
            $regex: "te",
            $options: "gi"
          }
        }
      ]
    },
    {
      tags: {
        $in: [
          "salt"
        ]
      }
    }
  ]
})