c# - 如何使用 MongoDB 的官方 C# 驱动程序检索所有嵌入式文档值?

标签 c# mongodb mongodb-.net-driver

给定以下类和示例文档,如何使用官方 C# 驱动程序从问题集合中检索 AnswerChoice 文档,其中 AnswerChoice 中的 _id 为“4d6d336ae0f84c23bc1fae00”。谢谢。

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
    }
}

//用于检索 AnswerChoice 的 _id 为“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);
}

//如何获取_id为“4d6d336ae0f84c23bc1fae00”的AnswerChoice对象?????

最佳答案

您应该加载问题(如上面的代码所示)并使用 linq 或 foreach 获取具有指定 _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 方法而不是 Find(因为我假设您确定只有一个具有上述指定 _id 的答案存在)。

关于c# - 如何使用 MongoDB 的官方 C# 驱动程序检索所有嵌入式文档值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5171462/

相关文章:

c# - 如何使用带有 `Immediate Effect` 的 C# .NET 更改全局 Windows 代理

c# - 使用 Quartz.NET 3.0.3 和简单注入(inject)器如何进行构造函数注入(inject)

javascript - Mongoose 填充未定义的字段

MongoDB 服务器接受服务器证书作为客户端证书

c# mongoDb 2.0 字典中不存在

mongodb - C# MongoDB 驱动程序 - 如何使用 UpdateDefinitionBuilder?

c# - 为什么 N'ko 使用 3 位小数来显示定点 ("F") 数字,而实际上其他所有文化都使用 2 位?

javascript - meteor "TypeError: Cannot read property ' 0' of undefined"

c# - 带有 MongoDB API 的 CosmosDB

C#,从字符串错误中解析日期