我试图使用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等待文档被插入。

10-08 16:23