Дубликат монго в той же коллекции
В монго у меня есть коллекции с записями. Эти записи очень сложны. Теперь я хотел бы дублировать один из них.
Я могу легко выбрать один
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);
Удачи!