首页 > 解决方案 > 使用 AND OR 在 mongodb 中搜索查询

问题描述

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

数据

{
"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=test 1 那么它应该在结果中给出第一个文档

案例 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(',')} }
      ]
  });
}

标签: node.jsmongodb

解决方案


操场

db.collection.find({
  $and: [
    {
      $or: [
        {
          "title": {//Used regex syntax
            $regex: "te",
            $options: "gi"
          }
        },
        {
          "description": {
            $regex: "te",
            $options: "gi"
          }
        }
      ]
    },
    {
      tags: {
        $in: [
          "salt"
        ]
      }
    }
  ]
})

正则表达式语法 mongodb您可以在代码中使用相同的语法。


推荐阅读