我正在关注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-$
可以完成这项工作,但事实并非如此。
如何匹配其他数组元素而不是查询的数组元素?
答案 0 :(得分:2)
不,这是不可能的。 $
指向数组中第一个匹配的元素。您无法构建对与该匹配元素相关的其他元素的引用。但是,您总是可以使用绝对引用(comments.1.votes
)。