使用C#MongoDB查询嵌套文档

use*_*130 5 c# mongodb nosql

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

{
  "Id": "000000000000000000000000",
  "Description": "sample string 1",
  "Athlete": {
    "Id": "123456789101112131415161",
    "Name": "sample string 2",
    "Username": "sample string 3",
    ...
  },
  ...
}
Run Code Online (Sandbox Code Playgroud)

如何查询此结构以Record基于检索对象Athlete.Id?IE,如果我有运动员的ID,并且想检索他们的记录,您将如何处理?

Dis*_*ser 5

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

var queryString = Query.EQ("Athlete.Id", "123456789101112131415161");
var resultBsons = collection.Find(queryString).ToList();
Run Code Online (Sandbox Code Playgroud)

方式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; }
}
Run Code Online (Sandbox Code Playgroud)

然后做你的查询

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();
Run Code Online (Sandbox Code Playgroud)


Cyn*_*mer 1

您可以使用您提供的格式通过子文档字段进行查询:Athlete.Id

db.collection_name.findOne({"Athlete.Id": "123456789101112131415161"})
Run Code Online (Sandbox Code Playgroud)

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

IMongoQuery query = Query.EQ("Athlete.Id", "123456789101112131415161");
Record result = collection_name.FindOne(query); 
Run Code Online (Sandbox Code Playgroud)

或者,如果可能返回具有匹配 ID 的多个文档:

IMongoQuery query = Query.EQ("Athlete.Id", "123456789101112131415161");
MongoCursor<Record> resultCursor = collection_name.FindOne(query); 
Run Code Online (Sandbox Code Playgroud)