MongoDB 如何实现自增长ID

单挑王子davidx

来自: 单挑王子davidx(怎样激发斗志呢?) 2010-10-08 11:08:57

1人 喜欢
  • 单挑王子davidx

    单挑王子davidx (怎样激发斗志呢?) 2010-10-09 10:18:21

    没人知道吗

  • 理想

    理想 (shaunli.com) 2010-10-11 08:35:39

    按 "Insert if Not Present" 的说法就是自己编码实现了,比如你用 python/ruby 那就在 python/ruby 里面去实现

  • 单挑王子davidx

    单挑王子davidx (怎样激发斗志呢?) 2010-10-12 14:29:42

    我现在就是这么做的...MongoDB为啥不支持个自定义函数呢

  • 豆蔻

    豆蔻 2010-10-27 13:46:56

    Mongodb 自动增长 自增id 实现
    http://blog.dotcoo.com/post-39.html

    我写的这个文章,其中有php自增的现实,希望能帮到你

  • 单挑王子davidx

    单挑王子davidx (怎样激发斗志呢?) 2010-10-27 14:31:03

    我已经用python实现了,原理就是mongodb网站上提供的那段js代码
    我看了下,和你的差不多

    PS 回复你的blog了

  • Mars

    Mars (上溢下漏) 2010-10-30 16:55:01

    mongo为什么不支持自增在Id,因为如果做分片的话,多个机器同步自增长id不但费时而且费力。这主要是从分布式的角度考虑的。类似的SVN的版本号就是顺序增加的,而Git这种分布式的采用的则是生成Hash的方法。“_id” 默认类型是ObjectId,但是这个是可以替换的,只要不重复就好了。不过大家要渐渐习惯默认的方式,在大数据量的时候,会避免很多烦恼~~

  • Mars

    Mars (上溢下漏) 2010-10-30 16:56:45

    另外明确地讲,mongo不但支持javascript函数和值,还有内置数据类型可以把代码直接放在文档中。

  • 单挑王子davidx

    单挑王子davidx (怎样激发斗志呢?) 2010-10-30 19:05:27

    这些我都明白, 但是有时又必须要自增长的ID
    比如在Sphinx里, ID不能超过10位,最多到9位, MongoDB生成的ID就不行了

  • iwind

    iwind (更勇敢一些) 2010-11-04 09:32:10

    用网站上的那个方案不是很好,因为每次都取最大的那个,在下述情况下会有问题:

    增加三个记录:
    ID
    1
    2
    3

    然后删除ID为3,然后你会期望下一个ID为4,但实际上新生成的还是3。

  • 豆蔻

    豆蔻 2010-11-09 19:54:09

    怎么会还是3呢,跟删没有删记录根本都没有关系。

  • 东子

    东子 (饿得神) 2010-11-18 20:01:50

    mongodb有自增的特性

  • 小嘿嘿 2010-12-10 15:44:31

    换个角度

  • 艾斯昆

    艾斯昆 (still wait) 2011-01-18 00:23:14

    可以再存放一个集合存储已经使用过的ID,每次在这个集合的基础上加一

  • yongtree

    yongtree (http://www.oecp.cn) 2011-01-21 01:16:26

    http://www.po-soft.com/hi/yongtree/blog/2157

    我的java实现,可以参考。

  • MoFo

    MoFo (・´ェ`・) 2011-12-06 00:57:26

    遇到这个郁闷问题了。麻烦呀!

  • hlcfan

    hlcfan 2011-12-06 17:23:42

    其实,你想想,没必要设置自增.可以直接用_id.这个与友好与否没有太大关系

  • 君之蘭

    君之蘭 2011-12-10 16:48:25

    objectid就是自增的

  • Lamborghini_lp

你的回应

回应请先 , 或 注册

4930 人聚集在这个小组

手机扫描二维码,把小组装进口袋

↑回顶部