How to use SetField in FindOne in MongoDB For C# Driver

假装没事ソ 提交于 2019-11-27 06:10:13

问题


I use offical C# Driver for mongodb, I want to use SetFields from a FindOne query like Find.

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

Is it possible to do that as FindOne return a actual class instead of mongodb cursor.


回答1:


SetFields method of MongoCursor.

Method FindOne just wrapper around MongoCursor and internally it looks so:

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

If you want add Exclude Fields functionality to it you can simply add extention method for 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();
    }
}

And use it like this:

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



回答2:


I am not sure about exclusion in findOne. But instead of findOne, you can better use find with limit 1 . That would return a cursor, which will ofcourse support exclusion of a field. Something like :

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


来源:https://stackoverflow.com/questions/6592752/how-to-use-setfield-in-findone-in-mongodb-for-c-sharp-driver

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!