我使用官方的C#驅動程序mongodb,我想從FindOne查詢中使用SetFields,例如Find。如何在MongoDB的FindOne中使用SetField對於C#驅動程序
var query = Query.EQ("Name", name);
Users.Find(query).SetFields(Fields.Exclude("Password"));
是否可以這樣做,因爲FindOne返回一個實際的類而不是mongodb遊標。
我使用官方的C#驅動程序mongodb,我想從FindOne查詢中使用SetFields,例如Find。如何在MongoDB的FindOne中使用SetField對於C#驅動程序
var query = Query.EQ("Name", name);
Users.Find(query).SetFields(Fields.Exclude("Password"));
是否可以這樣做,因爲FindOne返回一個實際的類而不是mongodb遊標。
SetFields
MongoCursor的方法。
方法FindOne只是包裝器MongoCursor並在內部它看起來如此:
public virtual TDocument FindOneAs<TDocument>() {
return FindAllAs<TDocument>().SetLimit(1).FirstOrDefault();
}
如果你想添加排除字段的功能,它可以簡單地添加extention方法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中的排除。 但是,而不是findOne,你可以更好地使用限制1查找。 這將返回一個遊標,它將支持排除一個字段。 喜歡的東西:
var theCursor = Users.Find(query).SetFields(Fields.Exclude("Password")).SetLimit(1) ;
var myItem = null;
foreach (var item in cursor) {
myItem = item ;
}
謝謝你的回答,我已經更新了t他質疑更多通用SetFields – Kuroro
Thx。只是忘了它是開源的。 – Kuroro
@Kuroro:不客氣 –
更改爲「in」cludedFields,因爲這比「ex」更有意義cludedFields –