update()的find部分中的mongodb位置运算符

update()的find部分中的mongodb位置运算符,mongodb,mongodb-query,positional-operator,Mongodb,Mongodb Query,Positional Operator,我正在尝试更新mongodb集合“用户”中的某个字段 文档示例: { _id:ObjectId(“536d4d3307221f847fbbea49”), 小组:[ { 匹配_id:“dc3acf1b”, 组名:“世界杯A组”, 分数:[0,1] }, { 匹配id:“d4f14940”, 组名:“世界杯A组”, 分数:[2,1] }], 名称:“富吧”, 分数:10分 } 我正在尝试只更新具有特定分数的分数字段 这是我想要的(位置操作员): db.users.update({'groups.m

我正在尝试更新mongodb集合“用户”中的某个字段

文档示例:

{
_id:ObjectId(“536d4d3307221f847fbbea49”),
小组:[
{
匹配_id:“dc3acf1b”,
组名:“世界杯A组”,
分数:[0,1]
},
{
匹配id:“d4f14940”,
组名:“世界杯A组”,
分数:[2,1]
}],
名称:“富吧”,
分数:10分
}
我正在尝试只更新具有特定分数的分数字段

这是我想要的(位置操作员):

db.users.update({'groups.match_id':i_match,'groups.score':i_score},
{$inc:{点数:1}});
现在我想这将查找同时具有这两个字段的用户,但我希望查找具有查询第一部分的同一个groups对象

例如:

db.users.update({'groups.match_id':d4f14940,'groups.score':[2,1]},
{$inc:{点数:1}});
应该给用户加1分

但是:

db.users.update({'groups.match_id':dc3acf1b,'groups.score':[2,1]},
{$inc:{点数:1}});
不应该

你明白我的意思:)

现在,我从中知道应该使用“$”符号,但我认为这只能用于update()的第二个参数-更新部分..而不是查找部分

注意-以这种方式(数组)对分数进行实际比较可能不起作用..但这不是问题所在

您需要的是运算符。这允许您选择需要多个字段来匹配条件的数组元素:

db.users.update(
{“组”:{
“$elemMatch”:{
“匹配id”:“d4f14940”,
“得分”:[2,1]
}      
}},
{“$inc”:{“点数”:1}
)
因此,这允许您匹配文档,因为“groups”数组包含一个元素,该元素同时具有满足您提供的条件的
match_id
score
。如果您在不更改分数的情况下更改了
match\u id
,则文档不匹配,并且不会对您的
分数进行增量

因此,在本例中,这与positional
$
操作符无关,因为您没有在匹配的位置更新和数组,这就是它的目的