Как вы клонируете (дублируете) объект 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);