【问题标题】:global auto-incrementing field in MongoDbMongoDb 中的全局自增字段
【发布时间】:2012-06-27 22:11:01
【问题描述】:

有没有办法在集合中创建全局自动递增值?

Perforce 具有 changelist# 的概念,它可以成为无状态更新的强大功能。我正在考虑相同类型的功能。

例子:

create> DocA.name = "foo" => changelist = 1
create> DocB.name = "bar" => changelist = 2
update> DocA.name = "bob" => changelist = 3
create> DocC.name = "joe" => changelist = 4

结果:

DocA.changelist = 3
DocB.changelist = 2
DocC.changelist = 4

然后我可以搜索在 changelist:4 之后所做的任何更改,并确信我没有遗漏任何内容。

mongodb 大师们对如何有效地做到这一点有什么想法吗?

【问题讨论】:

    标签: mongodb


    【解决方案1】:

    MongoDB 文档有一个auto-incrementing fields 的列表。一般来说,这是不好的做法,但这可能适用于您寻求的功能。

    也就是说,我还看到人们在上次更新时间使用“时间戳”。这可能会满足您的要求。

    同样,如果这是一个非常关键的功能,您可能需要查看看起来最接近您想要的 Riak 的 MVCC。

    【讨论】:

    • 感谢您的回复!时间戳总是存在潜在冲突的问题,直到微秒,这对我们来说是个问题。但是,我想到我们可以使用辅助集合来 $INC 一个附加到时间戳的计数器。那篇自动递增字段的文章看起来相当……丑陋。
    • hmmm,听起来您几乎需要某种形式的 MVCC...不知道您与 MongoDB 的关系如何,您可能想看看 Riak...关于自动增加文章,不推荐就不好了
    • 我明白你对 Riak 的意思,但我认为它仍然没有提供不断增加的数值。通过增加“更改列表”,可以轻松找到自上次检查以来集合中发生的更改。 vclock 是基于哈希的,并且更多地用于更新和同步冲突解决。
    猜你喜欢
    • 1970-01-01
    • 2015-12-24
    • 2021-09-13
    • 2020-12-01
    • 1970-01-01
    • 2019-10-05
    • 1970-01-01
    • 2013-11-18
    • 1970-01-01
    相关资源
    最近更新 更多