2011-03-02 3 views
3

다음 클래스와 샘플 문서가 주어지면 공식 C# 드라이버를 사용하여 AnswerChoice의 _id가 '4d6d336ae0f84c23bc1fae00'인 Question 컬렉션에서 AnswerChoice 문서를 검색하는 방법은 무엇입니까? 고맙습니다.MongoDB 용 공식 C# 드라이버를 사용하여 모든 포함 된 문서 값을 검색하는 방법은 무엇입니까?

public class Question 
{ 
    [BsonId] 
    public ObjectId QuestionId 
    {get;set;} 

    public string Question 
    {get;set;} 

    public List<AnswerChoice> AnswerChoices 
    {get;set;} 
} 

public class AnswerChoice 
{ 
    [BsonId] 
    public ObjectId AnswerChoiceId 
    {get;set;} 

    public string Answer 
    {get;set;} 

    public int Order 
    {get;set;} 

} 

// 샘플 문서

{ 
    "_id": "4d6d3369e0f84c23bc1facf7", 
    "Question": "Question 1", 
    "AnswerChoices": [ 
    { 
     "_id": "4d6d3369e0f84c23bc1facf2", 
     "Answer": "Answer Choice A", 
     "Order": 1 
    }, 
    { 
     "_id": "4d6d3369e0f84c23bc1facf3", 
     "Answer": "Answer Choice B", 
     "Order": 2 
    }, 
    { 
     "_id": "4d6d3369e0f84c23bc1facf4", 
     "Answer": "Answer Choice C", 
     "Order": 3 
    }, 
    { 
     "_id": "4d6d3369e0f84c23bc1facf5", 
     "Answer": "Answer Choice D", 
     "Order": 4 
    }, 
    { 
     "_id": "4d6d3369e0f84c23bc1facf6", 
     "Answer": "Answer Choice E", 
     "Order": 5 
    } 
} 

// 코드 "4d6d336ae0f84c23bc1fae00는"

List<Question> list = new List<Question>(); 
MongoServer _server = MongoServer.Create("mongodb://localhost"); 
MongoDatabase _database = _server.GetDatabase("test"); 
var query = Query.And(Query.EQ("AnswerChoices._id", new ObjectId("4d6d336ae0f84c23bc1fae00"))); 
MongoCollection<Question> collection = _database.GetCollection<Question>("Question"); 
MongoCursor<Question> cursor = collection.Find(query); 

foreach (var q in cursor) 
{ 
    list.Add(q); 
} 

가 어떻게 함께 AnswerChoice 개체를 검색 할 // _id의와 AnswerChoice이 그 질문을 검색 할 "4d6d336ae0f84c23bc1fae00"의 _id

답변

4

위의 코드와 같이 질문을로드하고 linq 또는 foreach를 사용하여 지정된 _id가있는 응답 항목을 가져와야합니다. (난 당신이 위의 _id 지정하여 하나의 대답은 확실히 존재한다고 가정하기 때문에)

List<Question> list = new List<Question>(); 
MongoServer _server = MongoServer.Create("mongodb://localhost"); 
MongoDatabase _database = _server.GetDatabase("test"); 
var query = Query.And(Query.EQ("AnswerChoices._id", new ObjectId("4d6d336ae0f84c23bc1fae00"))); 
MongoCollection<Question> collection = _database.GetCollection<Question>("Question"); 
MongoCursor<Question> cursor = collection.Find(query); 

var id = new ObjectId("4d6d336ae0f84c23bc1fae00"); 
foreach (var q in cursor) 
{ 
    var answerChoice = q.AnswerChoices.Single(x=> x.AnswerChoiceId == id); 
    list.Add(q); 
} 

이 또한 내가 대신 찾기를 사용 FindOne 방법의 제안 : 같은 코드 의지가 보인다.

+0

linq를 사용하지 않고 직접 할 수있는 방법이 있습니까? 당신의 방법이 내가 필요한 것에 효과가 있다고 생각합니다. 나는 단지 궁금하다. 고맙습니다! – atbebtg

+0

@atbebtg : 답변으로 foreach를 사용하십시오. –

관련 문제