如何使用monk/node.js调用mongodb函数



尝试实现这个:

http://docs.mongodb.org/manual/tutorial/create-an-auto-incrementing-field/#auto-增量计数器集合

为一些事情提供序列计数器。

我已经把函数存储在我的数据库中,但我不能在没有错误的情况下调用它:

var model_id=db.eval('getNextSequence("model")');

退货:

对象#没有方法"getNextSequence"

这是因为monk不支持通过eval使用db函数吗?

getNextSequence方法是应用程序代码的一部分并在应用程序中运行,而不是在数据库中运行。在mongodb文档的示例中,该应用程序是mongoshell,它基本上是一个简单的javascript包装器,您可以在其中轻松地声明自己的方法。

在任何情况下,实现可靠的、无间隙的计数器都不是小事,除非绝对需要,否则应该避免:

  1. 如果由于客户端崩溃、网络分区等原因导致后续插入失败,则在插入之前增加计数器将导致间隙
  2. 在插入之后递增计数器需要乐观插入循环(但不需要显式计数器,如链接中所示)。这更可靠,但对于并发编写器来说效率会很低,因为它会执行大量查询和失败的更新

简言之,如果你使用这些计数器,例如在一个帐户/租户内,其中帐户的用户是人类,那么这些计数器是可以的。如果你的账户很大,或者你有API客户,事情就会变得一团糟,因为它们可能会在几秒钟内崩溃并插入10000次,这会导致大量冲突。

切勿将增量键用作主键。

最新更新