Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 使用计数器集合在节点mongodb本机中自动递增_Node.js_Mongodb_Node Mongodb Native - Fatal编程技术网

Node.js 使用计数器集合在节点mongodb本机中自动递增

Node.js 使用计数器集合在节点mongodb本机中自动递增,node.js,mongodb,node-mongodb-native,Node.js,Mongodb,Node Mongodb Native,是否有任何方法可以使用节点mongodb native实现文档中所述的 我试图通过嵌套9000多个回调(听起来不整洁也不优雅)来避免这样做,但是编写本机驱动程序的好人拒绝实现同步/阻塞调用 本机驱动程序是否提供了调用用户定义函数并在查询期间使用其返回值的方法?或者是否有另一种提取顺序计数的方法……可能只是从ObjectID()中提取 有什么想法吗 编辑: 这不适用于\u id字段(由db.coll.save(x)处理) 我收集了不同类型的文档。如果你知道我的意思的话,每一个都需要它自己的“类型序

是否有任何方法可以使用节点mongodb native实现文档中所述的

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

本机驱动程序是否提供了调用用户定义函数并在查询期间使用其返回值的方法?或者是否有另一种提取顺序计数的方法……可能只是从
ObjectID()
中提取

有什么想法吗

编辑:
这不适用于
\u id
字段(由
db.coll.save(x)
处理)
我收集了不同类型的文档。如果你知道我的意思的话,每一个都需要它自己的“类型序列”或“类型序列”

我已经用一些嵌套调用实现了这个(以及其他东西),如下所示
doc
JSON.parse
'd,来自客户端。我必须将此
文档
id
(按
db.coll.save
排序)和
typeserial
(当前按
db.coll.count
排序,如下所示)返回给客户机


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

我基本上要用我的评论作为答案:


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

为了进一步解释,当您使用
查找并将
修改为
$inc
并从计数器集合返回
\u id
时,该脚本的运行以及随后插入的文档应该是唯一的。这种方法基本上没有竞争条件


这意味着您将需要某种父函数,如
insertWithAI
,它将执行第一次回调,使用
find和modify
链接插入的后一次回调,但在一天结束时,您应该只需要两次回调。

我基本上会将我的注释作为一个答案:


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

为了进一步解释,当您使用
查找并将
修改为
$inc
并从计数器集合返回
\u id
时,该脚本的运行以及随后插入的文档应该是唯一的。这种方法基本上没有竞争条件


这意味着您将需要某种父函数,如
insertWithAI
,它将执行第一次回调,使用
find和modify
链接插入的后一次回调,但在一天结束时,您应该只需要两次回调。

我使用“乐观循环”实现了自动递增在async的帮助下,它工作正常:


我在async的帮助下,通过“乐观循环”实现了自动增量,但运行良好:


您只需要两个回调,一个用于获取预定义的原子检索id,另一个用于实际插入文档。一旦您有了自动增量id,它应该对插入的文档始终是唯一的。这样,您只需要两个回调,一个用于获取预定义的原子检索id,另一个用于实际插入文档。一旦你有了自动增量id,它应该对你插入的文档总是唯一的。我目前正在使用
db.coll.count
获取我的序列,但是是在一个异步调用中。检查我上面的编辑以进一步澄清(我对模糊性的看法不好)。@Moje-Ah这使它更加复杂,但是,这些不是$inc字段,因此可能有一种方法可以调用
getSequentialId()
函数hmmmTouche!这是现在最棘手的部分->使用
getSequentialId(X)
函数实现持久计数器集合…非常优雅。@Moje我确实有一个想法,但没有用async实现,我会一直认为没有人找到解决此问题的方法?我目前正在使用
db.coll.count
来获取序列,但是在一个异步调用中。检查我上面的编辑以进一步澄清(我对模糊性的看法不好)。@Moje-Ah这使它更加复杂,但是,这些不是$inc字段,因此可能有一种方法可以调用
getSequentialId()
函数hmmmTouche!这是现在最棘手的部分->用
getSequentialId(X)
函数实现一个持久计数器集合…非常优雅。@Moje我确实有一个想法,但它没有用async实现,我会一直想有人能找到解决这个问题的方法吗?
 ///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
            }
        );
    }
 );