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

时间:2011-07-06 07:10:04

标签: c# mongodb mongodb-.net-driver

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

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

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

2 个答案:

答案 0 :(得分:10)

MongoCursor的

SetFields方法。

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

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

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

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

并像这样使用它:

 var user = Users.FindOne<User>("Password");

答案 1 :(得分:3)

我不确定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 ;
}