$ rename функция доступна только в версии для разработки 1.7.2. Как переименовать поле в 1.6.5?MongoDB 1.6.5: как переименовать поле в коллекции
ответ
Простейший способ выполнить такую операцию - перебрать набор данных, переназначив имя поля. Самый простой способ сделать это - написать функцию, которая выполняет повторную запись, а затем использовать синтаксис .find().forEach()
в оболочке.
Вот пример из оболочки:
db.foo.save({ a : 1, b : 2, c : 3});
db.foo.save({ a : 4, b : 5, c : 6});
db.foo.save({ a : 7, b : 8 });
db.foo.find();
remap = function (x) {
if (x.c){
db.foo.update({_id:x._id}, {$set:{d:x.c}, $unset:{c:1}});
}
}
db.foo.find().forEach(remap);
db.foo.find();
В случае выше Я делаю $unset
и $set
в том же действии. MongoDB не поддерживает транзакции между коллекциями, но выше это один документ. Таким образом, вам гарантировано, что набор и unset будут атомарными (i.e. они оба успешны, или оба они не работают).
Единственное ограничение здесь состоит в том, что вам нужно будет управлять внешними писателями, чтобы данные были согласованы. Мое обычное предпочтение для этого - просто отключить записи во время обновления. Если этот параметр недоступен, вам нужно выяснить, какой уровень согласованности вы хотите для данных. (Я могу предоставить некоторые идеи здесь, но это действительно собирается быть специфическими для данных и системы)
db.collection_name.update({}, {$rename: {"oldname": "newname"}}, false, true);
Это будет переименовать столбец для каждой строки в коллекции.
Кроме того, я обнаружил, что если ваш столбец (тот, который вы переименовываете), появляется в каталоге индекса (db.collection_name.getIndexes()), тогда вам придется отбрасывать и воссоздавать индекс (используя имя нового столбца).
- 1. MongoDB переименовать поле, используя условие
- 2. Как получить поле из коллекции mongodb
- 3. CakePHP, MongoDB: Как искать поле из коллекции
- 4. Доктрина MongoDB переименовать ссылку на поле
- 5. переименовать поле во встроенной матрице mongodb
- 6. MongoDB - Преобразование коллекции в поле массива
- 7. MongoDB Переименовать коллекцию в Sharding
- 8. Increment поле другой коллекции в MongoDB
- 9. Как переименовать поле для всех документов в MongoDB?
- 10. Как переименовать коллекцию в MongoDB?
- 11. Как обновить mongoDb 1.4.4 до 1.6.5 в ubutu 10.10?
- 12. MongoDB: Выполнение действий на поле коллекции
- 13. Python2.7 - Как прочитать определенное поле в коллекции MongoDB
- 14. Как экспортировать одно поле из коллекции в MongoDB?
- 15. Как добавить другое поле в коллекции с помощью mongodb?
- 16. Как обновить поле во всей коллекции в MongoDB используя морфий
- 17. Как изменить поле _id в коллекции MongoDB на User_id?
- 18. Переименовать поле в JsonSerializer
- 19. Как обновлять коллекции MongoDB
- 20. MongoDB - Как организовать коллекции
- 21. Создание коллекции из подмножества коллекции в mongodb
- 22. Поддержание порядка коллекции mongodb
- 23. Mongodb, засчитайте все объекты в поле, которое повторяется в коллекции
- 24. Экспортировать указанное поле коллекции в mongodb/mongodump в файл
- 25. MongoDB Обновление коллекции в
- 26. MongoDB коллекции _id поле как Хешированные или создать индекс
- 27. Как переименовать сохраненный JavaScript в MongoDB?
- 28. Как переименовать весь ключ в mongodb?
- 29. переименование коллекции с помощью mongoDB
- 30. MongoDB: дубликаты документов в коллекции
Вопрос явно задает вопрос о том, как выполнить это без $ rename ... – samkass
Здесь есть синтаксическая ошибка - последний '}' неуместен. Вы хотите запустить 'db.collection_name.update ({}, {$ rename: {" oldname ":" newname "}}, false, true);'. – girasquid
-1 это не работает в Mongo 1.6.5 – opyate