Bạn không nên có { "orgId" : 2 }
trong tài liệu cập nhật.
Xóa dòng này khỏi mã và nó sẽ hoạt động tốt.
u.append("orgId", orgId);
Lý do bạn gây ra lỗi là có hai cách để chỉ định bản cập nhật cho một tài liệu và bạn đã tạo một bánh mì chéo của cả hai cách. Các tùy chọn là:
- Cung cấp tài liệu đầy đủ cho bản cập nhật. Đối với mô hình này, tài liệu hiện có được ghi đè bởi tài liệu được cung cấp.
- Sử dụng toán tử cập nhật để sửa đổi tài liệu hiện có trong bộ sưu tập.
Nếu bạn sử dụng phiên bản thứ hai thì tất cả "khóa cấp cao nhất" trong tài liệu cập nhật sẽ bắt đầu bằng $
. Nếu bạn sử dụng tùy chọn đầu tiên thì không có khóa nào trong số các khóa cấp cao nhất sẽ bắt đầu bằng $
. Mã đã xem xét trường đầu tiên, nghĩ rằng đó là tài liệu thay thế và sau đó không thành công khi cố gắng xác thực phần còn lại của tài liệu là hợp lệ vì các khóa trong tài liệu không thể bắt đầu bằng $
(tránh nhầm lẫn với các tài liệu cập nhật hoặc truy vấn).
Chỉnh sửa:
Trong trường hợp upert (ví dụ:tài liệu chưa tồn tại và bạn gắn cờ cập nhật để cho phép upert) các toán tử đối sánh chính xác của truy vấn được sử dụng để bắt nguồn tài liệu. Đối với ví dụ trên, chúng tôi nhận được một tài liệu gốc của { "orgId" : 2 }
. Sau đó, máy chủ sẽ áp dụng các toán tử cập nhật và lưu kết quả.