问题描述
给定以下类和示例文档,如何从问题集合中检索AnswerChoice文档,其中_id在AnswerChoice是'4d6d336ae0f84c23bc1fae00'使用官方的C#驱动程序。谢谢。
Given the the following classes and sample document, How do I retrieve a AnswerChoice document from the Question collection where _id in AnswerChoice is '4d6d336ae0f84c23bc1fae00' using the official C# driver. Thank you.
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
}
}
//代码检索具有_id为4d6d336ae0f84c23bc1fae00的AnswerChoice的问题
//Code to retrieve Question that have AnswerChoice with _id of "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);
}
//如何使用_id4d6d336ae0f84c23bc1fae00检索AnswerChoice对象?
//How do I retrieve an AnswerChoice object with _id of "4d6d336ae0f84c23bc1fae00" ?????
推荐答案
您应该加载问题(如上面的代码),并使用linq或foreach获取指定的_ID。因此代码如下:
You should load question(as in code above) and use linq or foreach to get answer item with specified _id. So code will looks like:
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);
}
我建议而不是Find使用FindOne方法只有一个回答与上面指定的_id存在)。
Also i suggest instead of Find use FindOne method(because i suppose that you sure that only one answer with above specified _id exists).
这篇关于如何检索使用MongoDB的官方C#驱动程序的所有嵌入文档的价值?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!