Node.js 使用AND或OR在mongodb中搜索查询
使用不同的查询参数搜索记录 数据Node.js 使用AND或OR在mongodb中搜索查询,node.js,mongodb,Node.js,Mongodb,使用不同的查询参数搜索记录 数据 { "tags" : [ "salt", "tissue" ], "title" : "test 1", "category" : "food", "description" : "food details" "__v" : 0 }, { &qu
{
"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=test1,那么它应该给出结果中的第一个文档
案例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(',')} }
]
});
}
您可以在代码中使用相同的方法。它对当前问题有效,但问题是如果我测试不同的情况,它就不起作用了。看看这个。在这种情况下,它应该给出2个结果。你的想法是什么?标题测试2存在于第二个文档中,salt包含在第一个文档中,那么为什么它会给出1个文档作为响应?你有
和条件,这意味着所有条件都是真的。在第二种情况下,你没有盐。在这种情况下,我认为我们应该为查询创建一个动态子句。看这个我不明白。你可以在一个或多个条件下把这三个球都击垮。你能详细说明你的要求吗
db.collection.find({
$and: [
{
$or: [
{
"title": {//Used regex syntax
$regex: "te",
$options: "gi"
}
},
{
"description": {
$regex: "te",
$options: "gi"
}
}
]
},
{
tags: {
$in: [
"salt"
]
}
}
]
})