如何在mongodb / node.js中为现有集合添加自动增量?

时间:2017-07-25 11:53:13

标签: javascript node.js mongodb mongoose

是否有任何方法或包可以帮助我向现有集合添加自动增量?互联网上充满了关于如何在创建集合之前添加AI的信息,但是当集合已经存在时,我没有找到有关如何添加AI的信息......

2 个答案:

答案 0 :(得分:1)

MongoDB将所有文档顶级的_id字段保留为主键。 _id必须是唯一的,并且始终具有带唯一约束的索引。这是一个自动递增的字段。但是,可以按照MongoDB文档中的教程定义自己的自动递增字段。

Tutorial linkhttps://docs.mongodb.com/v3.0/tutorial/create-an-auto-incrementing-field/

答案 1 :(得分:1)

MongoDB没有内置的自动增量功能。

创建一个新集合以跟踪用于插入的最后一个序列值:

db.createCollection("counter")

它只能保存一条记录:

db.counter.insert({_id:"mySequence",seq_val:0})

创建一个JavaScript函数:

function getNextSequenceVal(seq_id){
   // find record with id seq_id and update the seq_val by +1
   var sequenceDoc = db.counter.findAndModify({
      query:{_id: seq_id},
      update: {$inc:{seq_val:1}},
      new:true
   });

   return sequenceDoc.seq_val;
}

要更新现有集合中的所有现有值,这应该有效(对于空{},如果您只想更新某些文档,则可以设置条件):

db.myCollection.update({},
   {$set:{'_id':getNextSequenceVal("mySequence")}},{multi:true})

现在,您可以将新记录插入现有集合中:

db.myCollection.insert({
   "_id":getNextSequenceVal("mySequence"),
   "name":"ABC"
})