Как вы клонируете (дублируете) объект MongoDB в коллекции того же БД? - PullRequest
12 голосов
/ 24 марта 2012

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

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

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

Ответы [ 3 ]

14 голосов
/ 24 марта 2012

Код

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

Описание

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

8 голосов
/ 19 мая 2015

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

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

var user = db.users.findOne(...)
user._id = new ObjectId()
// set other properties
db.users.insert(user)
2 голосов
/ 04 июля 2013

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

var rObject = dbObject.toJSON();
delete rObject._id;
db.insert(rObject);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...