2016-07-06 83 views
0

我有一個文件是這樣的:查詢/查找返回JSON對象在BsonDocument

{ "File" : "xxxxxxx.txt", 
     "Content" : [ 
      { "tag" : "Book", 
       "name" : "TestBook1", 
       "value" : "xxx" 
      }, 
      { "tag" : "Dept", 
       "name" : "TestDept1", 
       "value" : "yyy" 
      }, 
      { "tag" : "Employee", 
       "name" : "TestEmployee1", 
       "value" : "zzz" 
      }] 
    } 

我可以用查找文檔:

var filter = Builders<BsonDocument>.Filter.Eq("Content.tag", "Dept"); 
var result = collection.Find(filter).ToList(); 

然而,這將返回整個文檔。有沒有什麼辦法可以獲得JSON對象({"tag" : "Dept", "name" : "TestDept1"})?

我想要得到的只是「價值」屬性(在這種情況下,它是「yyy」),而不是整個文檔。

UPDATE:

像Phani的建議,我是能夠使用下面的代碼這項工作:

var subFilter = Builders<BsonDocument>.Filter.Eq("tag", "Dept"); 
var filter = Builders<BsonDocument>.Filter.ElemMatch("Content", subFilter); 
var result = 
    collection.Find(filter) 
     .Project(Builders<BsonDocument>.Projection.Exclude("_id").Include("Content.$")) 
     .ToList(); 

回答

2

您需要使用ElemMatch投影此。 db.testing.find({Content:{$ elemMatch:{「tag」:「Dept」}}},{「_ id」:0,「Content。$」:1})Shell查詢:db.testing.find

C#查詢將

Find(x => x.Content.Any(p => p.tag == "Dept")).Project(Builders<BsonDocument>.Projection.Exclude("_id").Include("Content.$")).ToList();

請檢查是否這是工作。

+0

Phani,謝謝你的回覆。不幸的是,我的JSON無法使用POCO類,因爲Content中的對象結構是動態的。爲了簡單起見,我使用了一個修復結構。有沒有辦法在LINQ中使用POCO類來完成這項工作? – notlkk

+0

Phani,我能夠使用.Project,就像您在Filter中結合使用的建議一樣,只包含Content對象。但是,這將返回整個內容對象。有沒有辦法進一步過濾結果,所以它只包含內容中的Dept部分? – notlkk

+0

Phani,再次感謝您的回覆。我想我明白了。我會更新我的帖子並接受你的回答。 – notlkk