node.js - 使用 AND OR 在 mongodb 中搜索查询
问题描述
使用不同的查询参数搜索记录。
数据
{
"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=test 1 那么它应该在结果中给出第一个文档
案例 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(',')} }
]
});
}
解决方案
db.collection.find({
$and: [
{
$or: [
{
"title": {//Used regex syntax
$regex: "te",
$options: "gi"
}
},
{
"description": {
$regex: "te",
$options: "gi"
}
}
]
},
{
tags: {
$in: [
"salt"
]
}
}
]
})
正则表达式语法 mongodb您可以在代码中使用相同的语法。
推荐阅读
- three.js - Orbit Controls 自动旋转一次
- django - 如何在 Django Form 中将 2 个日期时间字段分解为 1 个日期和 2 个时间?
- c# - 我在我的视图上自动生成控件,当我将它传递给控制器时它变得空
- java - Entity Class 到 DTO Class 的转换应该在哪一层处理?
- kubernetes - 创建服务负载均衡器时不要获取公共 IP
- svelte - 侧边栏配置文件链接需要在 sapper/svelte 登录后重新加载
- powershell - 获取 Netstat 输出 - Server 2008 R2 上的代码失败
- python - datetime.time的时区转换
- firebase - 参数类型 'Set
' 不能分配给参数类型 'Map ' - lua - 用于自动热键的 Lumacros