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

本文关键字:FindOne SetField 驱动程序 MongoDB For | 更新日期: 2023-09-27 18:01:11

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

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

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

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

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");

我不确定findOne中是否存在排除。但是,您可以更好地使用限制为1的find,而不是findOne。这将返回一个游标,当然它将支持排除字段。类似于:

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