使用C# MongoDB查询嵌套文档

6

我有一个名为 Record 的文档,其中包含一个嵌套文档作为 Athlete。在 JSON 中,结构如下:

{
  "Id": "000000000000000000000000",
  "Description": "sample string 1",
  "Athlete": {
    "Id": "123456789101112131415161",
    "Name": "sample string 2",
    "Username": "sample string 3",
    ...
  },
  ...
}

如果我有运动员的ID,想要检索他们的记录,该如何查询这个结构来检索基于 Athlete.IdRecord 对象呢?

3个回答

6

方法一:使用原始的BsonDocument:(它将返回一个BsonDocument列表)

var queryString = Query.EQ("Athlete.Id", "123456789101112131415161");
var resultBsons = collection.Find(queryString).ToList();

方法2:另一种方法是使用MongoDB C#驱动程序的Typed版本:

定义2个类:

public class Athlete
{
    public string Id { get; set; }
    public string Name { get; set; }
    public string Username { get; set; }
}

public class Record
{
    public string Id { get; set; }
    public string Description { get; set; }
    public Athlete Athlete { get; set; }
}

然后执行您的查询

var url = new MongoUrl("mongodb://localhost");
var client = new MongoClient(url);
var server = client.GetServer();
var database = server.GetDatabase("test");
var collection = database.GetCollection<Record>("records");

var query = Query<Record>.EQ(i => i.Athlete.Id, "123456789101112131415161");
var result = collection.Find(query).ToList();

3

除了已经提到的内容外,这篇博客可以帮助您处理更复杂的情况。基本上它可能看起来像这样:

records.Find(
  Query.ElemMatch("Athlete",
  Query.EQ("Id", athleteId)
));

1
您可以使用您提供的格式来查询子文档字段:Athlete.Id
db.collection_name.findOne({"Athlete.Id": "123456789101112131415161"})

编辑:要在C#中执行此操作,您可以执行以下操作,假设您在名为Record的类中定义了记录文档的结构:

IMongoQuery query = Query.EQ("Athlete.Id", "123456789101112131415161");
Record result = collection_name.FindOne(query); 

如果具有相同匹配 Id 的多个文档可能会返回:
IMongoQuery query = Query.EQ("Athlete.Id", "123456789101112131415161");
MongoCursor<Record> resultCursor = collection_name.FindOne(query); 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接