4

MongoDB からデータを取得するスクリプトを SSIS で作成しました。通常のドキュメントのクエリに問題はありませんが、ネストされたドキュメントから値を取得する方法がわかりません。たとえば、展開された「住所」には、「国」、「都道府県」、「市区町村」、「番地」、および「郵便番号」が含まれます。「国」(フィールド)の値のみを取得することに興味があります。理論的には、「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();

        }
}
4

2 に答える 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;
于 2011-12-28T22:27:38.083 に答える
0
db.users.find({_id: user_id},
              {'address.country': 1});

これにより、次のようなドキュメントが取得されます

{"_id": ObjectId('4efb78234ee9184d8b5a4e92'), 
 "address": {"country": "Russia"}}
于 2011-12-28T20:11:05.367 に答える