2011-07-06 2 views
8

mongodb에 offical 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 방법.

방법 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

"in"cludedFields보다 "ll"cludedFields보다 의미가 있기 때문에 "in"cludedFields로 변경되었습니다. –

3

findOne에서 제외에 대한 확신이 없습니다. 그러나 findOne 대신 find 1을 사용하는 것이 더 좋습니다. 커서를 반환하면 필드를 제외 할 수 있습니다. 같은 뭔가 : MongoCursor의

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

답장을 보내 주셔서 감사합니다. 그는보다 일반적인 목적의 질문 SetFields – Kuroro