0

我正在关注文档中的示例

> 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这里,因为乔是阵列中的第一个。为了获得另一个数组索引,我认为1-$可以完成这项工作,但事实并非如此。

一个如何匹配另一个数组元素而不是查询的元素?

4

1 回答 1

2

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

于 2012-06-11T22:09:00.770 回答