javascript - 通过引用修改 Javascript 对象

标签 javascript mongodb aggregation-framework

我正在尝试为 mongoDBaggregate 框架创建一个复杂的查询。它需要一个以编程方式添加 $and$or 的组件。

这是我对象的当前结构:

const inputObject = {
    "details.blackBottom": { "in": ["A","B","C","D"] },
    "details.blackTop": { "in": ["L","M"] },
    "details.redBottom": { "in": ["A","B","C","D"] },
    "details.redTop": { "in": ["L","M"] },
    "details.greenBottom": { "in": ["A","B","C","D"] },
    "details.greenTop": { "in": ["L","M"] }
}

但是,为了使该对象有用,我需要重新表述它,以便它同时使用 $or$and。最终输出应如下所示:

const outputObject = {
    "$and": [
        {
            "$or" : [
                {"details.blackBottom": { "in": ["A","B","C","D"] }},
                {"details.redBottom": { "in": ["A","B","C","D"] }},
                {"details.greenBottom": { "in": ["A","B","C","D"] }}
            ]
        },
        {
            "$or" : [
                {"details.blackTop": { "in": ["L","M"] } },
                {"details.redTop": { "in": ["L","M"] } },
                {"details.greenTop": { "in": ["L","M"] } }
            ]
        }
    ]
}

请注意,$or 组件按 BottomTop 分组。

如何将 inputObject 转换为所需的 outputObject

最佳答案

您可以结合使用 filtermap 方法:

const inputObject = {
    "details.blackBottom": { "in": ["A","B","C","D"] },
    "details.blackTop": { "in": ["L","M"] },
    "details.redBottom": { "in": ["A","B","C","D"] },
    "details.redTop": { "in": ["L","M"] },
    "details.greenBottom": { "in": ["A","B","C","D"] },
    "details.greenTop": { "in": ["L","M"] }
}

const outputObject = {
    $and: ["Bottom", "Top"].map( side => ({
        $or: Object.keys(inputObject)
                   .filter( key => key.endsWith(side) )
                   .map( key => ({ [key]: inputObject[key] }) )
    }) )
};

console.log(outputObject);
.as-console-wrapper { max-height: 100% !important; top: 0; }

关于javascript - 通过引用修改 Javascript 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45865710/

相关文章:

javascript - 在对象字面量中添加属性会产生 NaN

javascript - 在 AngularJS 完成异步加载后向 DOM 添加内容

mongodb - 如何从字符串转换为日期数据类型?

mongodb - mongodb 查询中的 $project 和 $in

MongoDb 聚合按日期分组

当文档准备好时,Javascript 调用 $(document).on ('click'

javascript - 只要我运行的变量小于 50,我的函数就无法正确运行

mongodb - 使用 keras.utils.Sequence 多处理和数据库 - 何时连接?

macos - 安装 MongoDB

javascript - 如何使用聚合来包含未从该方法返回的文档?