Vì vậy, điều đầu tiên cần nói ở đây là $elemMatch
không bắt buộc trong trường hợp của bạn vì bạn chỉ muốn so khớp trên một thuộc tính mảng duy nhất. Bạn sử dụng toán tử đó khi bạn cần các thuộc tính "hai hoặc nhiều hơn" từ cùng một phần tử mảng để phù hợp với các điều kiện của bạn. Nếu không, bạn chỉ cần sử dụng "ký hiệu dấu chấm" làm tiêu chuẩn.
Trường hợp thứ hai ở đây là với $push
, trong đó toán tử cụ thể đó có nghĩa là "thêm" các phần tử vào mảng. Trong trường hợp của bạn, bạn chỉ muốn "cập nhật" nên toán tử chính xác ở đây là $set
:
Activity.update(
{ "_id": activityId, "usersActivities.userId": Meteor.userId() },
{
"$set": {
'usersActivities.$.startDate': start,
'usersActivities.$.endDate': end
}
}
)
Vì vậy, $
vị trí ở đây là toán tử khớp với "chỉ mục tìm thấy" từ phần tử mảng và cho phép $set
toán tử để "thay đổi" các phần tử được khớp tại "vị trí" đó.