复制并重命名MongoDB中的文档字段

时间:2019-02-13 14:43:57

标签: mongodb

我想重命名Mongo集合中所有文档都具有的字段。 There's already a great answer for that。但是,我不想覆盖当前的属性名称,而是想将重命名的属性另存为新字段,而保留原始属性。

想象一下我的文档是这样的:

{
  "property": "Original property value"
}

我想获得这个:

{
  "property": "Original property value",
  "property_new": "Original property value"
}

我该怎么做?

2 个答案:

答案 0 :(得分:1)

您可以使用$out聚合

db.collection.find([
  { "$addFields": {
    "property_new": "$property"
  }},
  { "$out": "newCollection" }
])

它将创建一个名为newCollection的新集合,只需将其重新命名为现有集合即可。

答案 1 :(得分:0)

您只需在mongo shell上迭代集合元素并更新每个文档,即在property_new函数中以forEach的形式添加新属性,如下所示:

db.st5.find().forEach(function(o) { db.st5.update({"_id":o._id}, {$set: {"property_new": o.property} } )})

在更新之前,我在集合st5中将一个文档插入为:

> db.st5.insert({
...   "property": "Original property value"
... })
WriteResult({ "nInserted" : 1 })
> db.st5.find()
{ "_id" : ObjectId("5c643368b913e399ee84b4f8"), "property" : "Original property value" }

然后遍历每个元素并进行如下更新:

> db.st5.find().forEach(function(o) { db.st5.update({"_id":o._id}, {$set: {"property_new": o.property} } )})
> db.st5.find()
{ "_id" : ObjectId("5c643368b913e399ee84b4f8"), "property" : "Original property value", "property_new" : "Original property value" }
> 

希望这可以解决您的问题。