2016-08-21 2 views
0

MongoDb Datenanzeige so.finden Objekt Array Datenfeld in 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" 
} 

Ich möchte nur Status = OnAir Datenfilterung über Datenfelder zu finden. Nach dem Filtern über Daten sollte es ohne Status = TE WIP Datenobjekt angezeigt werden. Wie ich Abfrage mit mongodb Abfrage erstellen.

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

Antwort

0

Ich versuchte dies mit Aggregation.

eingeführt, wie das Beispiel in Aktien Sammlung gegeben unter

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

Dann Aggregation verwendet, um den gewünschten Ausgang

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

@ user3807112 war Kann ich dein Problem lösen? – user641887

0

Dies funktioniert perfekt für mich zu bekommen:

db.getCollection('Test').aggregate(
[{"$unwind":"$createdprojectData"}, 
{"$match":{"createdprojectData.Status" : "OnAir" }}]); 
Verwandte Themen