Mongodb 使用位置$operator和$inc更新ObjectId数组
我有一个meteor应用程序,我想用位置操作符从服务器端更新mongo文档。我还想增加值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"] } ]
投票
我的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
不会增加,也不会在已经提交投票时将其添加到数组中