【发布时间】:2017-05-26 19:43:21
【问题描述】:
我正在尝试做一些看似简单的事情,每次获取值时更新 MongoDB 中的视图计数器。
例如我用这种方法试过。
Meteor.methods({
'messages.get'(messageId) {
check(messageId, String);
if (Meteor.isServer) {
var message = Messages.findOne(
{_id: messageId}
);
var views = message.views;
// Increment views value
Messages.update(
messageId,
{ $set: { views: views++ }}
);
}
return Messages.findOne(
{_id: messageId}
);
},
});
但我无法让它按我想要的方式工作。例如 if(Meteor.isServer) 代码是无用的,因为它实际上并没有在服务器上执行。
在调用 findOne 后该值似乎不可用,因此它可能是异步的,但 findOne 没有回调功能。
我不希望客户端控制这部分,这就是我尝试在服务器端执行此操作的原因,但它需要在每次客户端获取值时执行。这听起来很难,因为客户端已经订阅了数据。
编辑:这是在阅读此处的答案后更新的方法。
'messages.get'(messageId) {
check(messageId, String);
Messages.update(
messageId,
{ $inc: { views: 1 }}
);
return Messages.findOne(
{_id: messageId}
);
},
【问题讨论】:
标签: mongodb meteor meteor-blaze