【发布时间】:2022-01-27 21:09:37
【问题描述】:
在更新管道中使用$mergeObjects 时,原始对象正在
覆盖。是否有任何替代方法可以避免这种情况发生,或者可以以任何方式使用$mergeObjects 来避免这种情况。
我有一份文件如下:
{
"employment": {
"selfEmployed": {
"netProfit": 1000,
"addbacks": [
{
"addbackId": "5a934e000102030405000001",
"value": 1000,
}
]
}
}
}
我有更新数据如下:
const update = {
"selfEmployed": {
"netProfit": 22,
}
};
更新查询是:
db.collection.update({},
[
{
$set: {
"employment": {
$mergeObjects: [
"$employment",
update
]
}
}
}
])
但是$mergeObjects 会覆盖对象以给出以下结果:
{
"employment": {
"selfEmployed": {
"netProfit": 22
}
}
}
预期结果:
{
"employment": {
"selfEmployed": {
"netProfit": 22,
"addbacks": [
{
"addbackId": "5a934e000102030405000001",
"value": 1000,
}
]
}
}
}
编辑 1:
我只能依靠顶级字段来执行更新。
下面的一些答案适用于selfEmployed。
但我也有其他领域的收藏。
例如
{
"employment": {
"selfEmployed": {
"netProfit": 1000,
"addbacks": [
{
"addbackId": "5a934e000102030405000001",
"value": 1000,
}
]
},
"unemployed": {
"reason": "some reason",
//... other data
}
// .. other data
}
}
而且我不想重复或编写多个查询来更新嵌套字段,并且使用直接设置也是不可能的。 我正在寻找一种使用上面给出的更新管道的方法。
【问题讨论】:
标签: javascript node.js mongodb mongodb-query aggregation-framework