如何在Sails中创建应用程序时覆盖Mongo数据库中的对象ID

时间:2015-06-22 07:56:21

标签: mongodb sails-mongo

我是Sails和Mongo Db的新手。目前我正在尝试使用Sails实现一个CRUD函数,我希望在Mongo db中保存用户详细信息。在模型中我有以下属性

"id":{
  type:'Integer',
  min:100,
  autoincrement:true
},
attributes: {
    name:{
     type:'String',
     required:true,
     unique:true
 },
    email_id:{
       type:'EMAIL',
       required:false,
       unique:false
},
   age:{
     type:'Integer',
     required:false,
     unique:false
   }
} 

我想确保使用从100开始的值覆盖_id,并使用每个新条目自动递增。我正在使用水线模型当我在DHC中调用Api时,我得到以下输出

"name": "abc"
"age": 30
"email_id": "abc@gmail.com"
"id": "5587bb76ce83508409db1e57"

这里给出的Id是对象Id。可以告诉我如何用100开始用100重写对象id,并且每个新值自动递增。

1 个答案:

答案 0 :(得分:3)

注意:Mongo ID应为unique as possible,以便扩展良好。默认ObjectId由时间戳,计算机ID,进程ID和随机递增值组成。只留下后者会使它易于碰撞。

然而,有时你非常想要美化永无止境的ObjectID值(即在encoding之后显示在URL中)。然后,您应该考虑使用适当的原子增量策略

Overriding _id示例:

db.testSOF.insert({_id:"myUniqueValue", a:1, b:1})

制作Auto-Incrementing Sequence

  • 使用计数器集合:基本上是一个分离的集合,用于跟踪序列的最后一个数字。就个人而言,我发现在system.js集合中存储findAndModify函数更具凝聚力,尽管它具有lacks版本控制的功能。
  • 乐观循环

修改

我找到了issue,其中sails-mongo的老板说:

  

MongoDb没有自动递增属性,因为它没有   支持它而不在a上做某种手动序列增量   单独的收集或文件。我们目前不会这样做   适配器,但它可以在将来添加或如果有人想要   提交公关。我们为sails-disk和sails-redis做类似的事情   获得对autoIncremeting字段的支持。

他提到了我在这个答案中添加的第一个技巧: 使用计数器集合。在同一期中, lewins 显示了一种解决方法。