我试图使用MongoDB和最新的10gen C#驱动程序(CSharpDriver-1.3.1.4349),进行“就地”更新,并获取影响结果的文档数量。
public static long SaveListings(string state, bool isActive, DateTime updateDate)
{
var result = Collection().Update(
Query.And(
Query.EQ("State", state),
Query.And(
Query.EQ("IsActive", isActive),
Query.LT("UpdateDate", updateDate))),
Update.Set("IsActive", false), UpdateFlags.Multi);
return result != null ? result.DocumentsAffected : -1;
}
由于某种原因,结果为null。如果从控制台执行此操作,则可以通过以下操作获得影响的行数:
db.Listing.update( { State: state.Abbreviation, IsActive: true, UpdateDate: { $lt: expiredDate } }, { $set: { IsActive: false } }, false, true);
var numRows = db.getLastErrorObj().n;
知道我在做什么错吗,或者这是C#驱动程序中的错误吗?
最佳答案
更新包含采用SafeMode
的重载方法。只需将其作为更新的第四个参数添加到您的代码中即可,并且不应为null:
...
UpdateFlags.Multi,
SafeMode.True);
那不是驱动程序错误,它可以按预期工作。如果在没有安全模式的情况下被插入,Mongodb不会等待文档(因此驱动程序返回null),但是如果您说SafeMode = true,则会强制mongodb等待文档被插入。