2016-08-21 6 views
0

MongoDbのようなデータ表示。mongodbのオブジェクト配列のデータフィールドを見つけよう

{ 
"_id" : ObjectId("57b1fc8b6ad888063048e72e"), 
"createdprojectName" : "Buffer Stock", 
"createdprojectData" : [ 
     { 
      "Status" : "OnAir", 
      "No" : "1", 
      "Site_Name" : "hjghjgjhg", 
      "Site_ID" : "gjhgjhg", 
      "OnAir_Target_Date" : "2016-08-01", 
      "Region" : "1", 
      "OnAir_Actual_Date" : "2016-08-10", 
      "G2_3G_4G" : "2G" 
     }, 
     { 
      "Status" : "TE WIP", 
      "No" : "2", 
      "Site_Name" : "sadsdssd", 
      "Site_ID" : "dvvs", 
      "OnAir_Target_Date" : "2016-08-01", 
      "Region" : "1", 
      "OnAir_Actual_Date" : "", 
      "G2_3G_4G" : "2G" 
     }, 
     { 
      "Status" : "OnAir", 
      "No" : "1", 
      "Site_Name" : "sadsadsdadadadsadsad", 
      "OnAir_Target_Date" : "2016-07-01", 
      "Site_ID" : "sadsad", 
      "OnAir_Actual_Date" : "2016-07-13", 
      "Region" : "1", 
      "G2_3G_4G" : "3G" 
     }], 
"createdprojectChechByManager" : "false" 
} 

は、私がデータフィールド上でのみStatus = OnAirデータのフィルタリングを見つけたいです。上記のデータをフィルタリングした後、Status = TE WIPデータオブジェクトなしで表示する必要があります。どのように私はmongodbクエリを使用して検索クエリを作成します。

  BasicDBObject findQuery = new BasicDBObject(); 
      BasicDBObject elemMatch = new BasicDBObject();  
      DBObject statusQuery = new BasicDBObject("Status", "OnAir"); 
      DBObject fields = new BasicDBObject("$elemMatch", statusQuery); 
      DBObject query = new BasicDBObject("createdprojectData",fields); 
      findQuery.put("createdprojectData", 1);  
      DBCursor cursor = collection.find(query, findQuery); 

答えて

0

これを集計を使用して試しました。その後

> db.stock.insert({ "_id" : ObjectId("57b1fc8b6ad888063048e72e"), "createdprojectName" : "Buffer Stock", "createdprojectData" : [   {    "Status" : "OnAir",    "No" : "1",    "Site_Name" : "hjghjgjhg",    "Site_ID" : "gjhgjhg",    "OnAir_Target_Date" : "2016-08-01",    "Region" : "1",    "OnAir_Actual_Date" : "2016-08-10",    "G2_3G_4G" : "2G"   },   {    "Status" : "TE WIP",    "No" : "2",    "Site_Name" : "sadsdssd",    "Site_ID" : "dvvs",    "OnAir_Target_Date" : "2016-08-01",    "Region" : "1",    "OnAir_Actual_Date" : "",    "G2_3G_4G" : "2G"   },   {    "Status" : "OnAir",    "No" : "1",    "Site_Name" : "sadsadsdadadadsadsad",    "OnAir_Target_Date" : "2016-07-01",    "Site_ID" : "sadsad",    "OnAir_Actual_Date" : "2016-07-13",    "Region" : "1",    "G2_3G_4G" : "3G"   }], "createdprojectChechByManager" : "false" }); 

以下のように株式のコレクションに与えられた例を挿入

は、これは私にとっては完璧な作品所望の出力

db.stock.aggregate([{"$unwind":"$createdprojectData"},{"$match":{"createdprojectData.Status":"OnAir"}},{"$group":{"_id":"$_id","createdprojectData":{"$push":"$createdprojectData"}}}]).pretty(); 
+0

user3807112 @ました私はあなたの問題を解決することができますか? – user641887

0

を取得するために凝集を使用:

db.getCollection('Test').aggregate(
[{"$unwind":"$createdprojectData"}, 
{"$match":{"createdprojectData.Status" : "OnAir" }}]); 
関連する問題