MongoDB重命名内嵌数组里对象的字段名

MongoDB重命名内嵌数组里对象的字段名

$rename操作符无法使用

MongoDB的$rename操作符是不能对数组的对象进行重命名。如下:

//在task集合中,其中一条文档数据
{
	"_id" : ObjectID("1312321312"),
	"paramList" : [
		{ "PARAMETERSCHNAME" : "aaa" }, // 希望将PARAMETERSCHNAME全部改成name
		{ "PARAMETERSCHNAME" : "bbb" },
		{ "PARAMETERSCHNAME" : "ccc" }
	]
}

通过$rename操作符时:

db.集合名.update({}, 
    {$rename:
        {"数组字段名.$.旧属性名":"数组字段名.$.新属性名"}
    },
    {multi:true}
);

报错:

The source field for $rename may not be dynamic: 数组字段名.$.旧属性名

正确方式

方案:迭代内嵌数据,对数组里的数据重新赋值给新的字段,并删除原来的字段

适用于Mongo3.4+(推荐)

db.集合名.find({}).forEach(function(item) {
     for(let i = 0; i != item.数组字段名.length; ++i) {
        item.数组字段名[i].新属性名= item.数组字段名[i].旧属性名;
        delete item.Field2[i].旧属性名;  
     }
     db.集合名.update({_id:item._id},item);
});

示例:

db.task.find({}).forEach(function(item) {
     for(let i = 0; i != item.paramList.length; ++i) {
        item.paramList[i].name= item.paramList[i].PARAMETERSCHNAME;
        delete item.Field2[i].PARAMETERSCHNAME;  
     }
     db.task.update({_id:item._id},item);
});

参考链接: MongoDB重命名内嵌数组里对象的字段名.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值