如何在MongoDB中的FindOne中使用SetField用于C#驱动程序

我使用mongodb的官方C#驱动程序,我想使用像Find这样的FindOne查询中的SetFields。

var query = Query.EQ("Name", name); Users.Find(query).SetFields(Fields.Exclude("Password")); 

是否可以这样做,因为FindOne返回一个实际的类而不是mongodb游标。

MongoCursor的SetFields方法。

方法FindOne只是包装MongoCursor并在内部看起来如此:

 public virtual TDocument FindOneAs() { return FindAllAs().SetLimit(1).FirstOrDefault(); } 

如果要为其添加排除字段function,只需添加MongoCollection扩展方法:

 public static class MongodbExtentions { public static T FindOne(this MongoCollection collection, params string[] excludedFields) { return collection.FindAllAs().SetLimit(1) .SetFields(excludedFields) .FirstOrDefault(); } } 

并像这样使用它:

  var user = Users.FindOne("Password"); 

我不确定findOne中的排除。 但是,不是findOne,你可以更好地使用限制1的find。 这将返回一个光标,它将支持排除一个字段。 就像是 :

 var theCursor = Users.Find(query).SetFields(Fields.Exclude("Password")).SetLimit(1) ; var myItem = null; foreach (var item in cursor) { myItem = item ; }