"типа" объект должен быть переделкой. Лучше налив, и фильтр с $type
:
var bulk = db.users2.initializeOrderedBulkOp(),
count = 0;
db.mycoll.find({ "_id": { "$type": 18 } }).forEach(function(doc) {
doc._id = parseInt(doc._id.valueOf());
bulk.insert(doc);
count++;
if (count % 1000 == 0) {
bulk.execute();
bulk = db.users2.initializeOrderedBulkOp();
}
});
if (count % 1000 != 0)
bulk.execute();
Обратите внимание, что, потому что это _id
вам нужна другая коллекция. Если вы пытаетесь сделать с другими полями и в пределах одной и той же коллекции, то вам нужно удалить и «сбросить» поле в документе для того, чтобы произвести изменения:
var bulk = db.mycoll.initializeOrderedBulkOp(),
count = 0;
db.mycoll.find({ "a": { "$type": 18 } }).forEach(function(doc) {
doc.a = parseInt(doc.a.valueOf());
bulk.find({ "_id": doc._id }).updateOne({
"$unset": { "a": "" }
});
bulk.find({ "_id": doc._id }).updateOne({
"$set": { "a": doc.a }
});
count++;
if (count % 500 == 0) {
bulk.execute();
bulk = db.mycoll.initializeOrderedBulkOp();
}
});
if (count % 500 != 0)
bulk.execute();
Параметр '_id' поле неизменна. Вам придется создавать новые документы с помощью нового '_id'. –