2014-12-11 2 views
3

У меня есть документ под названием Record, который содержит Athlete как вложенный документ. Структура выглядит в формате JSON:Запросить вложенные документы с C# MongoDB

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

Как вы запрашиваете эту структуру для извлечения Record объекта на основе Athlete.Id? И.Е. Если у меня есть идентификатор спортсмена, и я хочу получить их запись, как бы вы это сделали?

ответ

1

Вы можете запросить поле поддокумента, используя именно тот формат, который вы указали: Athlete.Id.

db.collection_name.findOne({"Athlete.Id": "123456789101112131415161"}) 

EDIT: Для того, чтобы сделать это в 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); 
2

Помимо того, что уже было сказано, это blog может помочь вам с более сложными ситуациями. В основном это может выглядеть следующим образом:

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

Way 1: Использование сырой BsonDocument: (это будет список BsonDocument возврата)

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

Way 2: Другой способ это использование типизированных версии MongoDB C# драйвер:

определяют 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(); 
Смежные вопросы