http://docs.mongodb.org/manual/tutorial/create-an-auto-incrementing-field/
官方文档给出了2种解决方法,我只看了第一种的时候:
function getNextSequence(name) {
var ret = db.counters.findAndModify(
{
query: { _id: name },
update: { $inc: { seq: 1 } },
new: true
}
);
return ret.seq;
}
与
function getNextSequence(name) {
var ret = db.counters.findAndModify(
{
query: { _id: name },
update: { $inc: { seq: 1 } },
new: true,
upsert: true
}
);
return ret.seq;
}
英文看得有点模糊,多了一个upsert到底是好还是不好?
不好,除非你有唯一索引,否則可能插入多個相同名字的文檔。可能會有多個
findAndModify
函數同時運行,它們都發現找不到已有的文檔,於是都決定插入新文檔,於是就重複了。