MongoDBアグリゲーションでは、特定のフィールドの既存のデータ型を変更することはできません。この場合、string
を変換するプログラミングコードを作成する必要があります int
へ 。以下のコードを確認してください
db.collectionName.find().forEach(function(data) {
db.collectionName.update({
"_id": data._id,
"moop": data.moop
}, {
"$set": {
"PartnerID": parseInt(data.PartnerID)
}
});
})
コレクションのサイズが上記のスクリプトよりも大きい場合、パフォーマンスが低下します。perfomaceの場合、mongoはmongoバルク操作を提供し、mongoバルク操作を使用してデータ型も更新します
var bulk = db.collectionName.initializeOrderedBulkOp();
var counter = 0;
db.collectionName.find().forEach(function(data) {
var updoc = {
"$set": {}
};
var myKey = "PartnerID";
updoc["$set"][myKey] = parseInt(data.PartnerID);
// queue the update
bulk.find({
"_id": data._id
}).update(updoc);
counter++;
// Drain and re-initialize every 1000 update statements
if (counter % 1000 == 0) {
bulk.execute();
bulk = db.collectionName.initializeOrderedBulkOp();
}
})
// Add the rest in the queue
if (counter % 1000 != 0) bulk.execute();
これにより、基本的に、サーバーに送信される操作ステートメントの量が、キューに入れられた1000回の操作ごとに1回だけ送信されるようになります。