Jef*_*Lau 1 javascript mongodb meteor
所以我“想要”工作的代码如下。我有一个变量名作为未读对象的键名,这似乎是在 MongoDB 中执行此操作的唯一方法是在外部创建一个对象并将其引用为 $inc 的值。这似乎不起作用,但是如果我只有一个关键的 partnerId 而不嵌套对象,它确实起作用。我的问题是如何让它与嵌套对象一起工作。
是否有效:
var partnerId = 234567;
var action = {
unread: {}
};
action[partnerId] = 1;
Threads.update(Session.get('currentChat'),
{
$inc: action
}, callback);
Run Code Online (Sandbox Code Playgroud)
不起作用,但希望它起作用:
var partnerId = 234567;
var action = {
unread: {}
};
action.unread[partnerId] = 1;
Threads.update(Session.get('currentChat'),
{
$inc: action
}, callback);
Run Code Online (Sandbox Code Playgroud)
我收到一个关于无法增加不是数字的东西的错误,我猜这是指对象中的对象。
我拥有的架构是这样的,用户 ID 为 123456 和 234567,我只想增加该数字:
{
_id: 123,
unread: {
123456: 0,
234567: 1,
}
}
Run Code Online (Sandbox Code Playgroud)
如果你想以非动态的方式写出来,你会这样做:
var id = Session.get('currentChat');
Threads.update(id, {$inc: {'action.unread.234567': 1}});
Run Code Online (Sandbox Code Playgroud)
$inc需要使用基于动态创建的键的对象,partnerId如下所示:
var partnerId = 234567;
var key = 'action.unread.' + partnerId;
var obj = {};
obj[key] = 1;
Run Code Online (Sandbox Code Playgroud)
现在obj看起来像:
{'action.unread.234567': 1}
Run Code Online (Sandbox Code Playgroud)
所以我们可以把它插入你的原始代码中:
Threads.update(id, {$inc: obj}, callback);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1333 次 |
| 最近记录: |