从MongoDB查询嵌套对象

4
我在SSIS中创建了一个脚本,从MongoDB中检索数据。虽然我没有任何查询常规文档的问题,但我不知道如何从嵌套的文档中检索值。例如,“Address”展开包含“Country”,“State”,“City”,“Street”和“Zip”。我只想检索“Country”(字段)值。理论上,我知道它应该是像“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

你可以使用FindAll返回的光标上的SetFields在C#中完成此操作:

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;

现在,接下来的挑战是如何从数组中提取数据。例如,其中一个数组看起来像这样:"devices -> Document -> device_data -> model" 或者 "devices -> Document -> device_data -> brand"。我要如何提取设备的型号或品牌?再次感谢您的帮助! - Pasha
我把“地址”改成了“位置”(另一个包含国家的字段),但我的脚本返回“找不到国家”,我无法弄清楚原因是什么... - Pasha

0
db.users.find({_id: user_id},
              {'address.country': 1});

这将会让你得到一个类似的文档。
{"_id": ObjectId('4efb78234ee9184d8b5a4e92'), 
 "address": {"country": "Russia"}}

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