Дубликат монго в той же коллекции

В монго у меня есть коллекции с записями. Эти записи очень сложны. Теперь я хотел бы дублировать один из них.

Я могу легко выбрать один

mongo> var row = db.barfoo.find({"name":"bar"});

Теперь я на самом деле не знаю, что делать. Я не знаю что в row потому что я не могу найти способ напечатать его содержание. Как я могу изменить определенные свойства и, наконец, вставить эту измененную строку снова

mongo> db.barfoo.insert(row);

Thnx

2 ответа

Решение

Я собираюсь предположить, что вы работаете непосредственно внутри оболочки монго.

Получив документ (не строку:P), вы измените свойства так же, как и обычный объект JavaScript:

var doc = db.barfoo.findOne( { "name": "bar" } );
doc.name = "Mr Bar";

Обратите внимание, что find() Команда возвращает курсор, поэтому, если вы хотите извлечь один документ, вы должны использовать findOne() функция Эта функция возвращает один документ.

Если вы заинтересованы в дублировании многочисленных документов, вы можете использовать find() Функция и итерация курсора для получения каждого документа:

db.barfoo.find( { "name": "bar" } ).forEach( function( doc ){
  doc.name = "Mr Bar";
}

После изменения соответствующих свойств вы можете использовать insert/save методы сохранения данных обратно в монго. Не забудьте изменить / удалить _id атрибут, так что вы действительно создадите новый документ.


В качестве примечания, чтобы просмотреть содержимое объекта в оболочке Монго, вы можете использовать print() функция Если вы хотите более визуально привлекательный вывод, вы можете использовать printjson(),

Вы должны изменить значение _id - генерировать новое:

var row = db.barfoo.findOne({"name":"bar"});
row._id = ObjectId();
db.barfoo.insert(row);

Удачи!

Другие вопросы по тегам