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の投票数を検索してインクリメントする方法を示しています。私が達成したいのは、ジョーの投票数を照会するときにジェーンの投票数を増やすことです。私の場合、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 に答える