如何使用 monk/node.js 调用 mongodb 函数?
How to call a mongodb function using monk/node.js?
尝试实现这个:
为一些事情提供序列计数器。
我已将函数存储在我的数据库中,但我无法在没有错误的情况下调用它:
var model_id = db.eval('getNextSequence("model")');
Returns:
对象 # 没有方法 'getNextSequence'
这是因为monk不支持通过eval使用db函数吗?
getNextSequence
方法是您的应用程序代码的一部分,它在您的应用程序中运行,而不是在数据库中运行。在 mongodb 文档的示例中,该应用程序是 mongo shell,它基本上是一个简单的 javascript-wrapper,您可以在其中轻松声明自己的方法。
无论如何,实施可靠、无间隙的计数器并非易事,除非绝对需要,否则应避免:
- 如果后续插入由于客户端崩溃、网络分区等原因失败,则在插入之前增加计数器会导致间隙
- 在 插入后增加计数器 需要 optimistic insert loop(但不需要显式计数器,如 link 中所示)。这更可靠,但对于并发编写器来说效率低下,因为它执行大量查询和失败的更新。
简而言之shell,如果您正在使用这些计数器,例如在单个帐户/租户中,帐户的用户是人类。如果您的帐户很大,或者如果您有 API 个客户,事情就会变得一团糟,因为它们可能会在几秒钟内爆裂并执行 10,000 次插入,从而导致大量冲突。
切勿将增量键用作主键。
尝试实现这个:
为一些事情提供序列计数器。
我已将函数存储在我的数据库中,但我无法在没有错误的情况下调用它:
var model_id = db.eval('getNextSequence("model")');
Returns:
对象 # 没有方法 'getNextSequence'
这是因为monk不支持通过eval使用db函数吗?
getNextSequence
方法是您的应用程序代码的一部分,它在您的应用程序中运行,而不是在数据库中运行。在 mongodb 文档的示例中,该应用程序是 mongo shell,它基本上是一个简单的 javascript-wrapper,您可以在其中轻松声明自己的方法。
无论如何,实施可靠、无间隙的计数器并非易事,除非绝对需要,否则应避免:
- 如果后续插入由于客户端崩溃、网络分区等原因失败,则在插入之前增加计数器会导致间隙
- 在 插入后增加计数器 需要 optimistic insert loop(但不需要显式计数器,如 link 中所示)。这更可靠,但对于并发编写器来说效率低下,因为它执行大量查询和失败的更新。
简而言之shell,如果您正在使用这些计数器,例如在单个帐户/租户中,帐户的用户是人类。如果您的帐户很大,或者如果您有 API 个客户,事情就会变得一团糟,因为它们可能会在几秒钟内爆裂并执行 10,000 次插入,从而导致大量冲突。
切勿将增量键用作主键。