Изменение позиционного оператора $

Я следую примеру в документах:

> 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 } ] }

Это показывает, как вы можете искать подсчет голосов Джо и увеличивать его. То, что я хотел бы сделать, это увеличить количество голосов Джейн при запросе Джо. В моем случае, comments массив всегда имеет длину 2. Возможно, он лучше всего показан с моим текущим (нерабочим) синтаксисом:

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

я думал $ было бы 0 здесь, потому что Джо является первым в массиве. Чтобы получить другой индекс массива, я предположил 1-$ сделал бы работу, но это не так.

Как можно сопоставить другой элемент массива, кроме запрашиваемого?

1 ответ

Решение

Нет, это невозможно. $ указывает на первый соответствующий элемент в массиве. Вы не можете создавать ссылки на другие элементы, относящиеся к этому сопоставленному элементу. Вы всегда можете использовать абсолютные ссылки, хотя (comments.1.votes).

Другие вопросы по тегам