Вы можете использовать простой скрипт вроде этого:
db.posts.dropIndex("*id index name here*"); // Drop Unique index
counter = 0;
page = 1;
slice = 1000;
total = db.posts.count();
conditions = {};
while (counter < total) {
cursor = db.posts.find(conditions, {_id: true}).sort({_id: 1}).limit(slice);
while (cursor.hasNext()) {
row = cursor.next();
db.posts.update({_id: row._id}, {$set: {id: ++counter}});
}
conditions['_id'] = {$gt: row._id};
print("Processed " + counter + " rows");
}
print('Adding id index');
db.posts.ensureIndex({id: 1}, {unique: true, background: false});
print("done");
сохраните его в assignids.js и запустите как
$ mongo dbname assignids.js
external-while, выбирая 1000 строк как времяи предотвращает таймауты курсора;внутреннее время присваивает каждой строке новый инкрементный идентификатор.