Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/474.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在MongoDB中增加具有变量名的嵌套对象_Javascript_Mongodb_Meteor - Fatal编程技术网

Javascript 如何在MongoDB中增加具有变量名的嵌套对象

Javascript 如何在MongoDB中增加具有变量名的嵌套对象,javascript,mongodb,meteor,Javascript,Mongodb,Meteor,下面是我“想要”的代码。我有一个变量名作为未读对象的键的名称,这似乎是在MongoDB中实现这一点的唯一方法,即在外部创建一个对象并将其引用为$inc的值。这似乎不起作用,但如果我只有一个键partnerId而没有嵌套该对象,它确实起作用。我的问题是如何让它与嵌套对象一起工作 是否有效: var partnerId = 234567; var action = { unread: {} }; action[partnerId] = 1; Threads.update(Session.get

下面是我“想要”的代码。我有一个变量名作为未读对象的键的名称,这似乎是在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);
我得到一个错误,不能增加非数字的东西,我想这是指对象中的对象

我的模式是这样的,用户ID是123456和234567,我只想增加这个数字:

{
  _id: 123,
  unread: {
    123456: 0,
    234567: 1,
  }
}

如果你想用非动态的方式写出来,你应该:

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);

如果你想用非动态的方式写出来,你应该:

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);

谢谢只是好奇,我的例子和你的例子有什么不同?我看到的唯一区别是如何生成密钥的语法。为什么这不起作用
action.unread[partnerId]=1
$inc
获取一个对象,该对象的键是要递增的字段,值是数字。要递增的字段是“action.unread.234567”,因此它必须是字符串。在您的示例中,
action
{unread:{'234567':1}}
。因此,将它与
$inc
一起使用就像说:“请用
{'234567':1}
的值来增加
未读的
”,这对数据库没有意义。我希望这能有所帮助谢谢只是好奇,我的例子和你的例子有什么不同?我看到的唯一区别是如何生成密钥的语法。为什么这不起作用
action.unread[partnerId]=1
$inc
获取一个对象,该对象的键是要递增的字段,值是数字。要递增的字段是“action.unread.234567”,因此它必须是字符串。在您的示例中,
action
{unread:{'234567':1}}
。因此,将它与
$inc
一起使用就像说:“请用
{'234567':1}
的值来增加
未读的
”,这对数据库没有意义。我希望这能有所帮助