如何在MongoDB中合并2个子属性?

时间:2013-11-16 16:32:36

标签: node.js mongodb node-mongodb-native

我有一个文档的2个子属性,并希望将所有属性从一个移动到另一个,但是后来我想要删除空属性。

现在我知道$ rename命令可用于将每个属性从一个地方移动到另一个地方,但我也希望空对象被销毁,但只有在移动之后。

那怎么做呢?

以下是一个例子:

{
    _id : ObjectID,
    firstProperty : {
        value0 : 1,
        value1 : 2
    },
    secondProp: {
        value5 : 3,
        value6 : 4
    }
}

然后在处理之后:

{
    _id : ObjectID,
    firstProperty : {
        value0 : 1,
        value1 : 2,
        value5 : 3,
        value6 : 4
    }
}

1 个答案:

答案 0 :(得分:0)

以下是如何在mongoshell中执行此操作,我希望将其转换为node.js并不困难,因为这是相同的js。

您的文件:

{
    _id : 1,
    firstProperty : {
        value0 : 1,
        value1 : 2
    },
    secondProp: {
        value5 : 3,
        value6 : 4
    }
}

从第二个属性复制信息:

var a = db.b.findOne({_id : 1},{secondProp : 1})

准备一个对象以使用update进行设置:

var setObj = {};
for(var i in a.firstProperty){
   setObj['firstProperty.'+i] = a.secondProp[i];
}

并使用$ set,$ unset

进行更新
db.b.update(
  {_id : 1},
  {$unset : {secondProp : 1}, $set : setObj }
)