Jadi hal pertama yang harus dikatakan di sini adalah $elemMatch
tidak diperlukan dalam kasus Anda karena Anda hanya ingin mencocokkan pada satu properti array. Anda menggunakan operator itu saat Anda membutuhkan "dua atau lebih" properti dari elemen larik yang sama agar sesuai dengan kondisi Anda. Jika tidak, Anda cukup menggunakan "notasi titik" sebagai standar.
Kasus kedua di sini adalah dengan $push
, di mana operator tertentu itu berarti "menambahkan" elemen ke array. Dalam kasus Anda, Anda hanya ingin "memperbarui" sehingga operator yang benar di sini adalah $set
:
Activity.update(
{ "_id": activityId, "usersActivities.userId": Meteor.userId() },
{
"$set": {
'usersActivities.$.startDate': start,
'usersActivities.$.endDate': end
}
}
)
Jadi posisi $
operator di sini adalah yang cocok dengan "indeks yang ditemukan" dari elemen array dan mengizinkan $set
operator untuk "mengubah" elemen yang cocok dengan "posisi" itu.