Если вы хотите преобразовать всю коллекцию, вы можете сделать это с помощью конвейера агрегации.
Вам необходимо преобразовать валюту в строку, используя $substr
и $toInt(
или $toDouble
, или $convert
, в зависимости от вашего случая) на этапе $project
и $out
в качестве последнего этапа.агрегации.$out
записывает результат конвейера агрегации в заданное имя коллекции.
Но будьте осторожны при использовании $out
.Согласно официальной документации mongodb:
Создать новую коллекцию
Операция $out
создает новую коллекцию в текущей базе данных, если она еще не существует.Коллекция не видна, пока агрегация не завершится.В случае сбоя агрегации MongoDB не создает коллекцию.
Заменить существующую коллекцию
Если коллекция, указанная в операции $out
, уже существует, то по завершенииагрегация, этап $out
атомарно заменяет существующую коллекцию новой коллекцией результатов.В частности, операция $out
:
- Создает временную коллекцию.
- Копирует индексы из существующей коллекции во временную коллекцию.
- Вставляет документы в временную коллекцию.
- Вызывает db.collection.renameCollection с dropTarget: true, чтобы переименовать временную коллекцию в целевую коллекцию.
Операция $out
не изменяет индексы, которые существовали в предыдущемколлекция.В случае сбоя агрегации операция $out
не вносит изменений в уже существующую коллекцию.
Попробуйте выполнить следующее:
db.collection_name.aggregate([
{
$project: {
category : "$category",
category_name : "$category_name",
lot_title : "$lot_title",
seller_name : "$seller_name",
seller_country : "$seller_country",
bid_count : "$bid_count",
winning_bid : { $toInt : {$substr : ["$winning_bid",2,-1]}},
bid_amount : "$bid_amount",
lot_image : "$lot_image"
}
},{
$out : "collection_name"
}
])
, возможно, вам придется использовать allowDiskUse : true
в качествевозможность агрегации конвейера, так как у вас много документов, и он может превысить предел в 16 МБ mongodb.
Не забудьте заменить collection_name
на фактическое имя коллекции и включить все необходимыеполе на этапе $project
, которое вам нужно в коллекции.И, пожалуйста, дважды проверьте значение сначала с другим temporary_collection
или просто удалив этап $ out и проверив результат aggregation
pipe.
Для получения подробной информации прочитайте официальную документацию mongodb $ out , $ toInt , $ toDouble , $ convert, $ substr и allowDiskUse .