方法一:

1. Create counters collection

db.counters.insert(

{

  _id : "userid",

  seq : 0

})

2. Create a getNextSequence function

function getNextSequence(name){

 var ret = db.counters.findAndModify(

            {

               query : { _id : name },

                update : {$inc : {seq : 1}},

                new : true

            }

 );

 return ret.seq;

}

3. add records

db.users.insert({ _id : getNextSequence("userid"), name : "Sarah C."});

db.users.insert({ _id : getNextSequence("userid"), name : "Bob D."});

4. Verify the results

db.users.find();

{_id : 1, name : "Sarah C."}

{_id : 2, name : "Bob D."}



方法二:

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;

           targetCollection.insert(doc);

           var err = db.getLastErrorObj();

           if(err && err.code){

                    if(err.code == 11000)

                           continue;

                     else

                           print("unexpected error inserting data:" + tojson(err));

             }

             break;

  }

}


var myCollection = db.users;

insertDocument({name : "Grace H."}, myCollection);

insertDocument({name : "Ted R."}, myCollection);


验证结果:

db.users.find();


{_id : 1, name : "Grace H."}

{_id : 2, name : "Ted R."}