Запрос вложенных объектов из MongoDB - PullRequest
4 голосов
/ 29 декабря 2011

Я создал скрипт в SSIS для извлечения данных из MongoDB.Хотя у меня нет проблем с запросом обычных документов, я не уверен, как извлечь значения из вложенных документов.Например, развернутый «Адрес» содержит «Страна», «Штат», «Город», «Улица» и «Почтовый индекс».Я заинтересован в получении только значений "Страна" (поле).Теоретически я понимаю, что это должно быть что-то вроде «Address.Country», но я не знаю, как реализовать это в моем коде.Каков наилучший способ достичь этого?

Этот код извлекает все остальные документы:

    public override void CreateNewOutputRows()
    {
        string connectionString = "mongodb://localhost";
        MongoServer myMongo = MongoServer.Create(connectionString);
        myMongo.Connect();
        var db = myMongo.GetDatabase("UserDB");
        /*ICursor<BsonDocument> cursor = db.GetCollection<BsonDocument>("UserDB").FindAll();*/
        foreach (BsonDocument document in db.GetCollection<BsonDocument>("UserDB").FindAll())
        {
            this.UserDBBuffer.AddRow();
            this.UserDBBuffer.ID = document["_id"] == null ? "" : document["_id"].ToString();

            this.UserDBBuffer.PrimaryEmail = document["primary_email"] == null ? "" : document["primary_email"].ToString();
            this.UserDBBuffer.Gender = document["gender"] == null ? "" : document["gender"].ToString();

        }
}

Ответы [ 2 ]

5 голосов
/ 29 декабря 2011

Вы можете сделать это в C #, используя SetFields для курсора, возвращаемого FindAll:

var fields = Fields.Include("Address.Country");
foreach (var document in collection.FindAll().SetFields(fields))
{
    Console.WriteLine(document.ToJson());
}

Вы можете извлечь значение Country из возвращенного документа, используя:

var country = document["Address"].AsBsonDocument["Country"].AsString;
0 голосов
/ 29 декабря 2011
db.users.find({_id: user_id},
              {'address.country': 1});

Это даст вам документ типа

{"_id": ObjectId('4efb78234ee9184d8b5a4e92'), 
 "address": {"country": "Russia"}}
...