Изменение позиционного оператора $
Я следую примеру в документах:
> 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
).