我正在使用Node.js进行MongoDB查询,但遇到无法解决的问题。
让我们假设我们在Mongo中有很多文档,每个文档都有一个标签数组
tags: [tag1, tag2, tag3]
前端将发送参数,我们希望使用这些参数进行查询...如何使用这些标签在Mongo中查找每个文档。标签可以有所不同,并非所有文档都具有相同的标签,但是我想拉出几乎具有这些标签之一的每个文档。我不知道我是否清楚这一点,但希望你能帮助我。
PD:如果查询有效,我们可以应用的查询超过13个,因此它需要像是动态查询或类似的查询。
致谢
答案 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需要一个非空数组,因此您应该验证至少从客户端接收到一个参数。