I'm using MongoDb 2.6.10 and using C# Driver 1.9.2. The server has a replicaset of two servers.
My documents are of the format. itemId is unique.
{
"itemID": 2314,
"Favorites": [1, 24, 26, 34]
}
Then I have code to remove a favorite of the form
var query = Query.EQ("itemID", itemId);
var result = collection.Update(query, Update.Pull("Favorites", favoriteIdToRemove));
After each time, I check that result.DocumentsAffected is equal to 1. Once in a while, the value comes back as 0. When I go into MongoDB myself, I can find the document matching the itemID, and I can see the favoriteId that it tried to remove in the array is still there. result.OK is true, and there's no error information.
What could cause this to fail?
I'm no expert but my guess is write concerns since there are different levels of guarantee for writing to and updating documents in MongoDB. See Write Concerns
So instead of using this method:
MongoCollection.Update Method (IMongoQuery, IMongoUpdate)
It might be better to use this method instead:
MongoCollection.Update Method (IMongoQuery, IMongoUpdate, WriteConcern)
And specify the WriteConcern to be
WriteConcern.WMajority
That way the update has the highest guarantee.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With