我正在使用MongoDb 2.6.10并使用C#Driver 1.9.2。服务器有两个服务器的复制集。
我的文件格式正确。 itemId是唯一的。
{
"itemID": 2314,
"Favorites": [1, 24, 26, 34]
}
然后我有代码删除表单的最爱
var query = Query.EQ("itemID", itemId);
var result = collection.Update(query, Update.Pull("Favorites", favoriteIdToRemove));
每次之后,我检查结果.DocumentsAffected等于1.偶尔,该值返回0.当我自己进入MongoDB时,我可以找到与itemID匹配的文档,我可以看到它试图在数组中删除的favoriteId仍然存在。 result.OK是真的,并且没有错误信息。
什么可能导致失败?
答案 0 :(得分:1)
我没有专家,但我的猜测是写问题,因为在MongoDB中写入和更新文档有不同级别的保证。见Write Concerns
所以不要使用此method:
class Nutrition
@@list = CSV.read("./lib/list.csv")
def self.carbs(name)
return "error" if @list.nil?
carb = (@@list.find { |x| x[0] == name })
carb.nil? ? "error" : carb[1]
end
end
最好使用此method代替:
MongoCollection.Update Method (IMongoQuery, IMongoUpdate)
并将WriteConcern指定为
MongoCollection.Update Method (IMongoQuery, IMongoUpdate, WriteConcern)
这样,更新具有最高的保证。
答案 1 :(得分:0)
当文档已经存在并且与前一个文档完全相同时,可能不需要进行任何更改,因此DocumentsAffected属性将为0.您可以在此处查看文档:{{3}} 。您可以在结果的Response属性中看到这些属性。