如何使用mongodb驱动程序针对Node.js进行多选项查询?

时间:2019-04-26 12:00:40

标签: arrays node.js mongodb express

我正在使用Node.js进行MongoDB查询,但遇到无法解决的问题。

让我们假设我们在Mongo中有很多文档,每个文档都有一个标签数组

tags: [tag1, tag2, tag3]

前端将发送参数,我们希望使用这些参数进行查询...如何使用这些标签在Mongo中查找每个文档。标签可以有所不同,并非所有文档都具有相同的标签,但是我想拉出几乎具有这些标签之一的每个文档。我不知道我是否清楚这一点,但希望你能帮助我。

PD:如果查询有效,我们可以应用的查询超过13个,因此它需要像是动态查询或类似的查询。

致谢

2 个答案:

答案 0 :(得分:1)

这是mongodb的聚合函数发挥作用的地方

让我们说有一个名为books的数据库,我们希望获取包含其类型中让人说['fantasy','sci-fi']的图书

db.book.aggregate([{
   $match:{
     genres:{
      $in:['fantasy', 'sci-fi']
      }
   }
}])

这将获得您想要的结果,找到所有包含幻想或科幻小说的书

db.book.aggregate([{
   $match:{
     genres:{
      $all:['fantasy', 'sci-fi']
      }
   }
}])

这将获得所有具有幻想和科幻风格的书籍

db.book.aggregate([{
   $match:{
     genres:{
      $nin:['fantasy', 'sci-fi']
      }
   }
}])

这将获取所有不具有这些值的书

答案 1 :(得分:0)

根据参数在代码中生成$ or条件:

let or_array = [];
params.forEach(params, (tag_param) => {
       or_array.push({tags: tag_param})
     });
let or_cond = {$or: or_array};

现在我们只需要一个简单的查找查询即可检索文档:

  let results = model.find(or_cond); 

结果应包含所需文档。

**请注意,$ or需要一个非空数组,因此您应该验证至少从客户端接收到一个参数。