我需要通过dbshell复制(克隆)集合中的对象。有这样的事情:
> db.users.distinct( 'nickname' )
[
"user1",
"user2",
"user3",
"user4"
]
>
其中user1在用户集合中选择一个复杂对象,如何复制该对象然后在userX中更改(重命名)user1字段?
答案 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。例如,整数转换为双精度。
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);