我使用官方的C#驱动程序来连接MongoDB,我想在FindOne查询中使用类似于Find的SetFields功能。
var query = Query.EQ("Name", name);
Users.Find(query).SetFields(Fields.Exclude("Password"));
有没有可能让FindOne返回一个实际的类,而不是mongodb游标?
我使用官方的C#驱动程序来连接MongoDB,我想在FindOne查询中使用类似于Find的SetFields功能。
var query = Query.EQ("Name", name);
Users.Find(query).SetFields(Fields.Exclude("Password"));
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中的排除操作。 但是,你可以使用带有limit 1 的find来取代findOne。 这将返回一个游标,当然支持对字段进行排除操作。 像这样:
var theCursor = Users.Find(query).SetFields(Fields.Exclude("Password")).SetLimit(1) ;
var myItem = null;
foreach (var item in cursor) {
myItem = item ;
}