Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过引用修改Javascript对象_Javascript_Mongodb_Aggregation Framework - Fatal编程技术网

通过引用修改Javascript对象

通过引用修改Javascript对象,javascript,mongodb,aggregation-framework,Javascript,Mongodb,Aggregation Framework,我正在尝试为mongoDB的aggregate框架创建一个复杂的查询。它需要一个以编程方式添加$和以及$或的组件 这是我的对象的当前结构: const inputObject = { "details.blackBottom": { "in": ["A","B","C","D"] }, "details.blackTop": { "in": ["L","M"] }, "details.redBottom": { "in": ["A","B","C","D"] },

我正在尝试为
mongoDB
aggregate
框架创建一个复杂的查询。它需要一个以编程方式添加
$和
以及
$或
的组件

这是我的对象的当前结构:

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": [
        {
            "$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"] } }
            ]
        }
    ]
}
请注意,
$或
组件按
底部
顶部
进行分组


如何将
inputObject
转换为所需的
outputObject

您可以通过组合使用
filter
map
方法来实现:

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”]}
}
常量输出对象={
$and:[“底部”、“顶部”].地图(侧面=>({
$or:Object.keys(inputObject)
.filter(key=>key.endsWith(侧))
.map(key=>({[key]:inputObject[key]}))
}) )
};
console.log(outputObject)
。作为控制台包装{最大高度:100%!重要;顶部:0;}