Как вы клонируете (дублируете) объект MongoDB в коллекции того же db?

Мне нужно дублировать (клонировать) объект в коллекции через dbshell. Имея что-то вроде этого:

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

где user1 выбирает сложный объект в коллекции пользователей, как я могу дублировать объект, а затем изменять (переименовывать) поле user1 в userX?

Ответ 1

Код

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

Описание

Вам нужно найти объект пользователя и поместить его в переменную. Затем вам нужно изменить требуемое свойство и вам нужно вставить весь объект как новый. Для этого вам нужно удалить свойство _id которое уже имеет объект. И чем просто использовать insert чтобы создать новую.

Ответ 2

Не удаляйте свойство _id; по некоторым причинам некоторые значения теряют свой тип. Например, целые числа преобразуются в двойные.

Используйте это решение:

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

Ответ 3

Поле _id является обязательным полем, и мы не можем его удалить. То, что я делаю, это вызвать toJSON() для возвращаемого объекта, а затем удалить _id.

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