2016-01-15 20 views
8

Tôi đang sử dụng MongoDb 2.6.10 và sử dụng Trình điều khiển C# 1.9.2. Máy chủ có bản sao của hai máy chủ.Phản hồi cập nhật Mongo không có tài liệu nào được cập nhật, nhưng tài liệu ở đó là

Tài liệu của tôi có định dạng. itemId là duy nhất.

{ 
    "itemID": 2314, 
    "Favorites": [1, 24, 26, 34] 
} 

Sau đó, tôi có mã để loại bỏ một yêu thích của mẫu

var query = Query.EQ("itemID", itemId); 
var result = collection.Update(query, Update.Pull("Favorites", favoriteIdToRemove)); 

Sau mỗi thời gian, tôi kiểm tra xem result.DocumentsAffected bằng 1. Một lần trong một thời gian, giá trị trở lại như 0. Khi tôi đi vào MongoDB bản thân mình, tôi có thể tìm thấy tài liệu phù hợp với itemID, và tôi có thể thấy favoritesId mà nó đã cố gắng loại bỏ trong mảng vẫn còn đó. result.OK là đúng, và không có thông tin lỗi.

Điều gì có thể gây ra lỗi này?

+1

Thông thường, sự cố là các loại không khớp giữa tài liệu và yêu cầu cập nhật. Bạn có thể chỉnh sửa câu hỏi của mình để cung cấp một ví dụ có thể tái tạo cụ thể không? – JohnnyHK

+0

Vấn đề là nó không thể tái sản xuất liên tục. Trong thực tế, nó xảy ra một lần mỗi vài ngày. Đó là mã chính xác của tôi và một tài liệu mẫu. – Nikhil

Trả lời

1

Tôi không có chuyên gia nhưng dự đoán của tôi là viết những lo ngại vì có các mức bảo đảm khác nhau để viết và cập nhật tài liệu trong MongoDB. Xem Write Concerns

Vì vậy, thay vì sử dụng này method:

MongoCollection.Update Method (IMongoQuery, IMongoUpdate) 

Nó có thể là tốt hơn để sử dụng này method thay vì:

MongoCollection.Update Method (IMongoQuery, IMongoUpdate, WriteConcern) 

Và xác định WriteConcern là

WriteConcern.WMajority 

Bằng cách đó, bản cập nhật có guara cao nhất ntee.

+0

Không phải tất cả các thao tác ghi được thực hiện tại máy chủ chính chưa? – Nikhil

+0

Có, tất cả các hoạt động ghi xảy ra trên chính. Tuy nhiên, bạn có thể chỉ thị cho người chính đợi để xác nhận một ghi thành công cho đến khi số N của người thứ hai đã nhân bản ghi. –

+0

Tôi sẽ thử điều đó. Tuy nhiên, nếu tất cả các bài viết đều ở trên tiểu học, tại sao việc thay đổi mối quan tâm viết sẽ ảnh hưởng đến phiên bản của tài liệu được nhìn thấy? – Nikhil

0

Có khả năng khi tài liệu đã tồn tại và hoàn toàn giống với tài liệu trước, không cần thay đổi và do đó tài sản DocumentsAffected sẽ là 0. Bạn có thể xem tài liệu tại đây: https://docs.mongodb.org/manual/reference/method/WriteResult/#WriteResult. Bạn có thể thấy các thuộc tính này trong thuộc tính Response của kết quả.

+0

Trừ khi truy vấn của tôi cho tài liệu trên không chính xác, tôi chắc chắn tài liệu nên xóa một mục yêu thích. Khi tôi kiểm tra tài liệu bằng MongoVUE, nó hiển thị yêu thích mà tôi đã cố gắng xóa. – Nikhil

+0

Nếu bạn có thể tạo ra một bản sao đáng tin cậy (hoặc không tin cậy), hãy gửi một vé máy chủ tại địa chỉ jira.mongodb.org. –

Các vấn đề liên quan