我正在使用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 空数组,因此您应该验证至少从客户端接收到一个参数。