javascript - 为 mongodb 创建查询
问题描述
定义变量:
let min_cost = '';
let status = '';
let min_rent = '';
let filter = {};
我在下面有一个结构$and: []
,它具有如下定义的三个对象,在这里,我尝试仅在有效负载包含它们的值时才将这三个对象一一插入。例如:如果min_cost !== ''
,则应将第一个对象推入$and : []
并与状态和 相同min_rent
,然后最后插入$and : []
过滤器对象。
{
$and: [
{
$and: [
{ "data.label": "Total Cost" },
{
"data.value": {
"$gte": min_cost
}
}
],
},
{
$and: [
{ "data.label": "Possession Status" },
{ "data.value": status }
],
},
{
$and: [
{ "data.label": "Estimated Monthly Rent" },
{
"data.value": {
"$gte": min_rent
}
}
],
},
]
}
最终输出:
db.collection.aggregate([
{
"$match": filter
}
])
提前致谢!
解决方案
检查条件并将$and
对象推送到过滤器数组,然后将所有条件$and
与filter
数组一起放入$match
阶段。
let min_cost = '';
let status = '';
let min_rent = '';
let filter = [];
if (min_cost) {
filter.push({
$and: [
{ "data.label": "Total Cost" },
{ "data.value": { "$gte": min_cost } }
]
});
}
if (status) {
filter.push({
$and: [
{ "data.label": "Possession Status" },
{ "data.value": status }
]
});
}
if (min_rent) {
filter.push({
$and: [
{ "data.label": "Estimated Monthly Rent" },
{ "data.value": { "$gte": min_rent } }
]
});
}
db.collection.aggregate([
{ "$match": filter.length ? { $and: filter } : {} }
])
推荐阅读
- javascript - 触摸后禁用jQuery移动向下滚动
- c - C中char之前的预期表达式
- php - 在 PHP 中检测 WEBP 图像是否透明
- azure - 通过 YML 按计划运行特定阶段
- c++ - 图像导出在opencv中返回灰度图像
- java - 如何在 Android Studio 的默认工具栏中更改文本大小?
- c# - 卡夫卡消费消息,然后生产到另一个主题
- docker - 用于 MAC 的 Docker | 无法运行程序“docker-credential-desktop”
- android - 在 chrome 更新我的颤振应用程序后,新的 bug 崩溃了
- java - 如何在java中读取txt文件的某些行?