所以我想'工作'的代码如下。我有一个变量名称作为未读对象的键的名称,这似乎是在MongoDB中执行此操作的唯一方法是在外部创建一个对象并将其作为$ inc的值引用。这似乎不起作用,但如果我只有一个关键的partnerId没有嵌套对象,它确实有效。我的问题是我如何使用嵌套对象。
工作:
var partnerId = 234567;
var action = {
unread: {}
};
action[partnerId] = 1;
Threads.update(Session.get('currentChat'),
{
$inc: action
}, callback);
不起作用,但希望它起作用:
var partnerId = 234567;
var action = {
unread: {}
};
action.unread[partnerId] = 1;
Threads.update(Session.get('currentChat'),
{
$inc: action
}, callback);
我收到的错误是无法增加不是数字的东西,我猜这是指对象中的对象。
我拥有的架构是这样的,123456和234567作为用户ID,我只想增加这个数字:
{
_id: 123,
unread: {
123456: 0,
234567: 1,
}
}
答案 0 :(得分:4)
如果你想以非动态方式写出来,你可以这样做:
var id = Session.get('currentChat');
Threads.update(id, {$inc: {'action.unread.234567': 1}});
$inc
需要使用基于partnerId
的动态创建的密钥来获取对象,如下所示:
var partnerId = 234567;
var key = 'action.unread.' + partnerId;
var obj = {};
obj[key] = 1;
现在obj
看起来像:
{'action.unread.234567': 1}
因此我们可以将其插入您的原始代码中:
Threads.update(id, {$inc: obj}, callback);