Документ в моей коллекции rooms
имеет следующую структуру:
{
"_id": { "$oid": "4edaaa4a8d285b9311eb63ab" },
"users": [
{
"userId": { "$oid": "4edaaa4a8d285b9311eb63a9" },
"unreadMessages": 0
},
{
"userId": { "$oid": "4edaaa4a8d285b9311eb63aa" },
"unreadMessages": 0
},
]
}
Я бы хотел увеличить unreadMessages
второго пользователя (с индексом 1 в массиве), если я знаю ObjectId
пользователя first . Для выбора достаточно знать _id
документа, но для обновления мне нужно иметь возможность ссылаться на другого пользователя, поэтому я также выбираю по users
. Я делаю это со следующим вызовом обновления:
collections.rooms.update(
{
_id: ObjectId("4edaaa4a8d285b9311eb63ab"),
users: { // not first user
$elemMatch: { $ne: { userId: ObjectId("4edaaa4a8d285b9311eb63a9") } }
}
},
{
// this should increment second user's unreadMessages,
// but does so for unreadMessages of first user
$inc: { "users.$.unreadMessages": 1 }
}
);
Увеличивает unreadMessages
первого пользователя , а не второго пользователя. Я предполагаю, что это потому, что $ne
на самом деле совпадает с первым пользователем, и, очевидно, это то, на что ссылается users.$
.
Как мне изменить этот вызов так, чтобы unreadMessages
второго пользователя был увеличен?