我将如何存储全局计数变量?

时间:2013-12-19 19:21:04

标签: mongodb meteor

假设我想拥有数据库中每个文档的运行计数。

例如,从空数据库开始;调用Collections.insert将检查增量全局计数变量,然后将其值存储为文档中的字段。

在db上将读取一些示例输入,如下所示。 例如。数:1名:第一名     count:2 name:Second

2 个答案:

答案 0 :(得分:1)

您可以使用集合来跟踪计数器。我们称之为counters

在您的集合中插入文档之前,请调用find_and_modify集合中的counters以原子方式递增计数器并返回其值。将此值存储在文档上,然后将其插入。

此程序在MongoDB docs中有详细描述。请注意,对于具有大量文档的数据库,它不会扩展,如那些文档中所述。

答案 1 :(得分:1)

为什么不保持简单,如果要将全局计数器存储在Meteor会话变量中(对客户端是全局的)请尝试:

// doc is your record. Make other changes here too: 
// i.e. doc.answer_text = "Ask Mork, Na-nu, Na-nu!";

doc.count = Session.get('myCounter');
doc.count++;

Stuff.insert( doc ); // Collection name is Stuff.

检查当前用户是否更改并重置计数器:

Session.set('myUserId', Meteor.userId); 
if (Session.get('myUserId') !== Meteor.userId)
    Session.set('myCounter', 0);

如果您只想增加存储在集合中的计数器:

Stuff.insert( doc, {$inc: {mycounter: 1} }  );