MongoDB重命名字段/键

4
我想在MongoDB文档中更改字段名称(仅更改字段名称而不更改值)。该文档如下所示,集合中只有一个用户为Soham的文档:
{_id : ObjectId(xxxxxxxxxxxx),
 user : "Soham",
 age  : 29
}

现在我想将名为“user”的字段更改为“name”,但不更改字段的值。因此,在Mongo shell中,我编写了以下命令:
var soh = db.user.find({"user":"Soham"});
soh.name = soh.user;
delete soh.user;
db.user.update({"user":"Roshan"},soh);

当我运行更新命令时,会抛出错误。由于我是MongoDB的新手,不确定我哪里做错了。非常感谢任何帮助。
2个回答

12

有一个操作符$rename

db.user.updateMany( {}, { $rename: { "user": "name" } } )

如何从Mongoshell复制ObjectId?我试图选择它,但无法实现。。有任何想法吗? - Soham
你可以尝试这样做。`var cursor = db.user.find();while (cursor.hasNext()) { var doc= cursor.next(); print( "_id: " + doc._id ); }`。更多信息请参见https://docs.mongodb.com/manual/tutorial/iterate-a-cursor/。 - s7vr
非常感谢您! - Soham
这是如何插入嵌入式文档的方法。db.names.update({name:"Soham"},{ $set: { "address.city": "zzz", "address.zip":1234 } })。更多信息请参见https://docs.mongodb.com/manual/reference/operator/update/set/。如果您发现更多问题,请创建一个新问题,因为这不属于此处讨论的范围。 - s7vr
好的,只回答书中的部分。var a = db.names.findOne({"name":"Soham"}); a.address = {city:"XYZ",zip:1234}; db.names.update({name:"Soham"},a); find返回游标,而findOne返回文档。 - s7vr
显示剩余2条评论

10

使用$rename操作符。

因此,在mongo shell中更新单个文档:

db.user.update( { _id: ObjectId(xxxxxxxxxxxx) }, { $rename: { 'user': 'name'} } )

更新所有文档

db.user.updateMany( {}, {$rename: { "user": "name" } } )

我该如何从Mongoshell复制ObjectId(而不是手动编写)? 我尝试选择它,但无法复制.. 有什么想法吗? - Soham
如果有帮助,请标记此答案。 - Alex

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接