example consultas c# mongodb ssis nested bson

c# - consultas - Consultar objetos anidados de MongoDB



consultas mongodb c# (2)

Creé un script en SSIS para recuperar datos de MongoDB. Si bien no tengo problemas para consultar documentos comunes, no estoy seguro de cómo recuperar valores de documentos anidados. Por ejemplo, "Dirección" expandida contiene "País", "Estado", "Ciudad", "Calle" y "Zip". Estoy interesado en recuperar los valores de "País" (campo) solamente. En teoría, entiendo que debería ser algo así como "Address.Country", pero no sé cómo implementarlo en mi código. ¿Cuál es la mejor manera de lograr eso?

Este es el código que recupera todos los demás documentos:

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


Puede hacer eso en C # usando SetFields en el cursor devuelto por FindAll:

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

Puede extraer el valor del país del documento devuelto usando:

var country = document["Address"].AsBsonDocument["Country"].AsString;


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

Esto te dará un documento como

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