2011-07-06 9 views
8

私はmongodbのオフラインC#ドライバを使用しています。FindなどのFindOneクエリのSetFieldsを使用したいと思います。MongoDBのFindOneでSetFieldを使用する方法C#ドライバ

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

はFindOneとして代わりにMongoDBのカーソルの実際のクラスを返すことを行うことが可能です。

答えて

10

SetFieldsはMongoCursorの方法。

メソッド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"); 
+0

Thxに質問します。それがopensourceであることを忘れてしまった。 – Kuroro

+0

@Kuroro:あなたを歓迎します –

+0

"ex"よりも意味をなさないので、 "in" cludedFieldsに変更されましたcludedFields –

3

findOneでの除外についてはわかりません。 しかし、findOneの代わりに、limit 1のfindを使用すると良いでしょう。 これは、フィールドの除外を強制するカーソルを返します。 のような何か:

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

私はあなたの答えをありがとう彼はより汎用的なSetFields – Kuroro

関連する問題