如何在同一个数据库的集合中克隆(复制)MongoDB对象?

时间:2012-03-24 10:33:47

标签: mongodb shell database nosql

我需要通过dbshel​​l复制(克隆)集合中的对象。有这样的事情:

> db.users.distinct( 'nickname' )
[
        "user1",
        "user2",
        "user3",
        "user4"
]
>

其中user1在用户集合中选择一个复杂对象,如何复制该对象然后在userX中更改(重命名)user1字段?

3 个答案:

答案 0 :(得分:14)

代码

> user = db.users.findOne({'nickname': 'user1'})
> user.nickname = 'userX'
> delete user['_id']
> db.users.insert(user)

<强>描述

您需要找到用户对象并将其放入变量中。您需要修改所需的属性,而不是需要将整个对象作为新对象插入。为此,您需要删除对象已有的_id属性。而不仅仅是使用insert来创建新的。{/ p>

答案 1 :(得分:7)

不要删除_id属性;由于某种原因,某些值会丢失type。例如,整数转换为双精度。

使用this solution

var user = db.users.findOne(...)
user._id = new ObjectId()
// set other properties
db.users.insert(user)

答案 2 :(得分:2)

_id字段是必填字段,我们无法将其删除。我所做的是调用返回对象的JSON(),然后删除_id。

var rObject = dbObject.toJSON();
delete rObject._id;
db.insert(rObject);