我们需要在MongoDB数据库中创建一个原子例程。
我们需要遍历一个集合,从集合中的所有文档中找到给定字段的最高数字,然后递增它。我们正在处理一些我们需要集成的遗留数据,否则我们已经有了一些原子序列。
如何在MongoDB中创建可以原子方式运行整个例程的存储过的JS或存储过程?
我看到了一些信息,但对我来说没有什么特别清楚:
Called a stored javascript function from Mongoose?
https://groups.google.com/forum/#!topic/mongoose-orm/sPN3wfDstX4
https://github.com/mongoosejs/mongoose-function
在哪里可以找到有关如何实际编写在MongoDB中运行的原子/阻塞存储过程以及如何从应用程序实际调用存储过程的良好信息?
答案 0 :(得分:1)
(总结上述评论)
目前,mongodb中没有任何内容可以让你以原子方式运行一段任意逻辑(包括多个查询来收集数据)。
mongodb提供的最好的原子事是findAndModify。它的原子性自然只限于一个文档,你有一个非常有限的update operators列表(也就是说,你甚至不能使用文档的字段,与常规更新相同)。
使用应用程序级锁定有点:应用程序插入或修改一个特殊的锁定文档,它会向应用程序的其他部分发出信号“我正在使用/更新它,请不要碰它“。操作完成后,应用程序会释放锁定,因此现在可以由其他人自由重新获取。当然,这完全依赖完全来尊重锁定协议的演员,这是不太可靠的,温和地说。