通过引用修改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;}