MongoDB предоставляет 2 способа автоматического увеличения _id (или пользовательский ключ) .
Коллекция счетчиков
Здесь нам нужно создать коллекцию, которая хранит максимальное количество ключей и увеличивает их на 1 каждый разкогда мы вызываем эту функцию.
1.ФУНКЦИЯ МАГАЗИНА
function getNextSequence(collectionName) {
var ret = db.counters.findAndModify({
query: { _id: collectionName },
update: { $inc: { seq: 1 } },
new: true,
upsert: true
});
return ret.seq;
}
2.INSERT DOC
db.users.insert({
_id: getNextSequence("USER"),
name: "Nishchit."
})
Optimistic Loop
В этом шаблоне Optimistic Loop вычисляет увеличенное значение _id и пытается вставить документ с вычисленным значением _id.Если вставка прошла успешно, цикл заканчивается.В противном случае цикл будет повторять возможные значения _id до тех пор, пока вставка не будет успешной.
1.ФУНКЦИЯ МАГАЗИНА
function insertDocument(doc, targetCollection) {
while (1) {
var cursor = targetCollection.find( {}, { _id: 1 } ).sort( { _id: -1 } ).limit(1);
var seq = cursor.hasNext() ? cursor.next()._id + 1 : 1;
doc._id = seq;
var results = targetCollection.insert(doc);
if( results.hasWriteError() ) {
if( results.writeError.code == 11000 /* dup key */ )
continue;
else
print( "unexpected error inserting data: " + tojson( results ) );
}
break;
}
}
2.INSERT DOC
var myCollection = db.USERS;
insertDocument(
{
name: "Nishchit Dhanani"
},
myCollection
);
Официальный документ от MongoDB .