1

是否有任何方法可以实现文档中描述的带有 node-mongodb-native的计数器集合?

我试图通过嵌套超过 9000 个回调来避免这样做(恕我直言,这听起来不整洁且不优雅),但编写此本机驱动程序的好人拒绝实现同步/阻塞调用。

本机驱动程序是否提供某种方式来调用用户定义的函数并在查询期间使用它们的返回值?或者是否有另一种提取顺序计数的方法....可能仅从ObjectID()?

有任何想法吗?

编辑:
这不适用于该_id领域(由 负责db.coll.save(x)
我在集合中有不同类型的文档。如果您知道我的意思,这些中的每一个都需要自己的“类型序列”或“类型序列”。

我已经用几个嵌套调用实现了这个(加上其他东西),如下所示。docJSON.parse从客户那里得到的。我必须将其返回doc给客户端_id(按 排序db.coll.save)和typeserial(当前按db.coll.count如下所示排序)

 ///more nesting Async calls above. 
 db.collection('dox').count( { "type" : doc.type } ,
    function( err , count )
    {
        ///{some err checking code here}
        doc.typeseq = (1+count);
        db.collection('dox').save( doc ,
            function( err , doc )
            {
                ///{more code here}
                ///Finally return JSON.stringified doc with new info/members to client-side
            }
        );
    }
 );

我只是想知道是否有一种更优雅、反异步的方式来获取我的doc.typeserial

4

2 回答 2

1

我基本上会把我的评论作为答案:

您只需要两个回调,一个用于获取预定义的原子检索 _id,另一个用于实际插入您的文档。一旦你有你的自动增量 _id 它应该总是以这种方式插入的文档是唯一的

为了解释更多,当您使用findAndModifyto$inc和从 counters 集合返回时,该集合_id应该是唯一的,即该脚本的运行以及随之而来的文档插入。这种方法基本上不会有竞争条件。

这确实意味着您将需要某种父函数,例如insertWithAI它将执行第一个回调 usingfindAndModify以链接后一个回调的插入,但最终您应该只需要两个回调。

于 2013-08-22T07:48:01.767 回答
0

我在异步的帮助下使用“乐观循环”实现了自动增量,而效果很好:

使用 mongoDB 创建递增的数字

于 2015-06-04T20:10:17.207 回答