首页 > 解决方案 > 为 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
}
])

提前致谢!

标签: javascriptmongodbmongodb-query

解决方案


检查条件并将$and对象推送到过滤器数组,然后将所有条件$andfilter数组一起放入$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 } : {} }
])

推荐阅读