【问题标题】:How to add auto increment to existing collection in mongodb/node.js?如何在 mongodb/node.js 中向现有集合添加自动增量?
【发布时间】:2017-12-31 07:58:12
【问题描述】:

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

【问题讨论】:

  • 自动增量是什么意思? Mongo 的 _id 是自动增量生成的。
  • @Jeremy Thille 1, 2, 3, 4, 5 ... 等等。
  • Mongodb 没有原生的自增整数序列,AFAIK。

标签: javascript node.js mongodb mongoose


【解决方案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"
})

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2021-06-20
      • 2018-02-12
      • 2021-07-17
      • 2011-02-26
      • 2018-07-15
      • 2019-11-05
      • 2020-04-29
      • 2012-03-18
      相关资源
      最近更新 更多