Vì vậy, tôi đã có thể giải quyết vấn đề này bằng cách thay đổi truy vấn để theo dõi trường được cập nhật cùng lúc nhưng không được lồng vào nhau. Tôi nghĩ rằng vấn đề khi kiểm tra trường lồng nhau là ChangeEvent
của updateDescription
thuộc tính không chứa đối tượng lồng nhau thực sự đã thay đổi; thay vào đó nó chứa đại diện ký hiệu dấu chấm của sự thay đổi. Vì vậy, nếu bạn xem Cập nhật 2 trong bài đăng của tôi, bạn sẽ thấy rằng updatedFields
có giá trị này:{\"someOtherField\":310,\"message.fansNo\":1...
thay vì {\"someOtherField\":310,\"message\":{\"fansNo\":1...
. Bằng cách sử dụng message.fansNo
trong truy vấn $ match, Mongo sẽ tìm hình dạng đối tượng này:{\"message\":{\"fansNo\":1...
, không khớp trong trường hợp này. Giải pháp "thực sự" ở đây có thể là thoát khỏi .
trong message.fansNo
trong biểu thức so khớp của tôi, nhưng tôi không thể làm cho điều đó hoạt động (xem chủ đề này
).
Vì vậy, "giải pháp" phù hợp với tôi thực sự chỉ là một cách giải quyết phù hợp với trường hợp sử dụng cụ thể của tôi:điều đó xảy ra là someOtherField
luôn được cập nhật cùng với message.fansNo
và someOtherField
không được lồng vào nhau. Vì vậy, tôi có thể khớp với someOtherField
mà không lo lắng về việc làm tổ. Về cơ bản, biểu thức đối sánh này mang lại cho tôi kết quả mà tôi muốn:
{
"$or": [
{
"updateDescription.updatedFields.someOtherField": {"$exists":true}
},
{
"updateDescription.updatedFields.someOtherField":{"$exists":true}
}
]
}
Hy vọng điều này sẽ giúp ích cho người khác!