我想重命名Mongo集合中所有文档都具有的字段。 There's already a great answer for that。但是,我不想覆盖当前的属性名称,而是想将重命名的属性另存为新字段,而保留原始属性。
想象一下我的文档是这样的:
{
"property": "Original property value"
}
我想获得这个:
{
"property": "Original property value",
"property_new": "Original property value"
}
我该怎么做?
答案 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" }
>
希望这可以解决您的问题。