如何使用 nodejs 的 mongodb 驱动程序进行多选项查询



我正在使用Nodejs进行MongoDB查询,我有一个无法解决的问题。

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

tags: [tag1, tag2, tag3]

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

PD:如果查询有效,我们可以应用超过 13 个,所以它需要像动态查询一样。

问候

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

假设有一个名为"书籍"的数据库,我们希望获得包含["幻想","科幻"]类型的书籍。

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']
      }
   }
}])

这将获取所有没有这些值的书籍

根据

参数在代码中生成$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需要一个 none 空数组,因此您应该验证至少从客户端接收到一个参数。

最新更新