2011-12-28 4 views
4

MongoDB에서 데이터를 검색하기 위해 SSIS에 스크립트를 만들었습니다. 정규 문서를 쿼리하는 데 문제가 없지만 중첩 된 문서에서 값을 검색하는 방법을 모르겠습니다. 예를 들어 확장 된 '주소'에는 '국가', '주', '도시', '거리'및 '우편 번호'가 포함됩니다. "국가"(필드) 값만 검색하는 데 관심이 있습니다. 이론적으로, 나는 그것이 "Address.Country"와 같은 것이어야한다는 것을 이해하지만, 그것을 코드에서 구현하는 방법을 모른다. 이를 달성하는 가장 좋은 방법은 무엇입니까?MongoDB에서 중첩 된 개체를 쿼리하십시오.

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

     } 
} 

답변

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

이 커서에 SetFields를 사용하면 C#에서 당신이 할 수있는

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

같은 문서를 얻을 것이다 :

다른 모든 문서를 검색하는 코드입니다 FindAll에 의해 반환 됨 :

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; 
+0

감사합니다! 이것은 내가 필요한 것입니다! – Pasha

+0

이제 다음 과제는 배열에서 데이터를 추출하는 방법입니다. 예를 들어, 배열 중 하나는 "devices -> Document -> device_data -> model"또는 "devices -> Document -> device_data -> brand"와 같습니다. 기기의 모델 또는 브랜드를 어떻게 추출합니까? 다시 한 번 도움을 주셔서 감사합니다. – Pasha

+0

"주소"를 "위치"(국가가 포함 된 다른 필드)로 변경하고 내 스크립트가 "국가를 찾을 수 없음"을 반환하고 이유를 파악할 수 없습니다 ... – Pasha

관련 문제