Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.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
Mongodb 使用位置$operator和$inc更新ObjectId数组_Mongodb_Meteor_Mongodb Query - Fatal编程技术网

Mongodb 使用位置$operator和$inc更新ObjectId数组

Mongodb 使用位置$operator和$inc更新ObjectId数组,mongodb,meteor,mongodb-query,Mongodb,Meteor,Mongodb Query,我有一个meteor应用程序,我想用位置操作符从服务器端更新mongo文档。我还想增加值投票 我的mongo文档看起来像: { _id: "yBonLeLPTcffxJwY9", endDate: "someDate", name: "Foo", options: [ { name: "bar", voted: 1, usersId: ["yBonLeLPTczzaJwY9"] } ]

我有一个meteor应用程序,我想用位置操作符从服务器端更新mongo文档。我还想增加值
投票

我的mongo文档看起来像:

{
    _id: "yBonLeLPTcffxJwY9",
    endDate: "someDate",
    name: "Foo",
    options: [
      {
        name: "bar",
        voted: 1,
        usersId: ["yBonLeLPTczzaJwY9"]
      }
    ]
}
Votes.update({
      _id: mongoId,
      'options.name': voteName
    }, {
      $inc: {'options.$.voted': 1},
      $push: {'options.$': {usersId: userId}}
  });
我的更新请求如下所示:

{
    _id: "yBonLeLPTcffxJwY9",
    endDate: "someDate",
    name: "Foo",
    options: [
      {
        name: "bar",
        voted: 1,
        usersId: ["yBonLeLPTczzaJwY9"]
      }
    ]
}
Votes.update({
      _id: mongoId,
      'options.name': voteName
    }, {
      $inc: {'options.$.voted': 1},
      $push: {'options.$': {usersId: userId}}
  });
我收到了以下错误消息:

MongoError:字段“options.1”必须是数组,但其类型为文档{u id:“YbonleptCfxjWy9”}中的Object


我在几个论坛上发现,minimongo中存在一个限制,它会影响位置运算符的使用和增加值

错误告诉了你正确的事情。您包含了一个“文档”,而不是普通成员。所以语法有点不同:

vows.update({
_id:mongoId,
“options.name”:voteName
}, {
$inc:{'options.$。投票:1},
$push:{'options.$.usersId':userId}
});
因此,使用“
$push
”将“点表示法”中的内部字段完全引用到要添加到的数组中。这就解决了错误

我还建议,在“投票”系统中,您应该首先检查条目的
usersId
数组:

vows.update({
_id:mongoId,
“options.name”:voteName,
'options.usersId':{'$ne':userId}
}, {
$inc:{'options.$。投票:1},
$push:{'options.$.usersId':userId}
});
这样,当投票人再次提交投票时,您的
$inc
不会增加,也不会在已经提交投票时将其添加到数组中