从 MongoDB 查询嵌套对象

本文关键字:对象 嵌套 查询 MongoDB | 更新日期: 2023-09-27 18:19:02

我在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();
        }
}

从 MongoDB 查询嵌套对象

您可以在 C# 中使用 FindAll 返回的游标上的 SetFields 执行此操作:

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

您可以使用以下命令从返回的文档中提取"国家/地区"值:

var country = document["Address"].AsBsonDocument["Country"].AsString;
db.users.find({_id: user_id},
              {'address.country': 1});

这将为您提供类似的文档

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