修改$位置运算符

时间:2012-06-11 22:06:23

标签: arrays mongodb matching positional-operator

我正在关注the example in the docs

> t.find()
{ "_id" : ObjectId("4b97e62bf1d8c7152c9ccb74"), "title" : "ABC",
  "comments" : [ { "by" : "joe", "votes" : 3 }, { "by" : "jane", "votes" : 7 } ] }

> t.update( {'comments.by':'joe'}, {$inc:{'comments.$.votes':1}}, false, true )

> t.find()
{ "_id" : ObjectId("4b97e62bf1d8c7152c9ccb74"), "title" : "ABC",
  "comments" : [ { "by" : "joe", "votes" : 4 }, { "by" : "jane", "votes" : 7 } ] }

这显示了如何搜索Joe的投票数并增加它。我想要完成的是在查询Joe的时候增加Jane的投票数。在我的例子中,comments是一个总长度为2的数组。也许它最好用我当前的(非工作)语法显示:

t.update( {'comments.by':'joe'}, {$inc:{'comments[1-$].votes':1}}, false, true )

我认为$在这里0因为Joe是数组中的第一个。为了得到另一个数组索引,我假设1-$可以完成这项工作,但事实并非如此。

如何匹配其他数组元素而不是查询的数组元素?

1 个答案:

答案 0 :(得分:2)

不,这是不可能的。 $指向数组中第一个匹配的元素。您无法构建对与该匹配元素相关的其他元素的引用。但是,您总是可以使用绝对引用(comments.1.votes)。