2016-05-31 12 views
2

Ich habe gründlich vor dem Posten dieser Frage recherchiert, aber ich konnte keine genaue Lösung finden. Ich habe die unten gezeigten StrukturMongoDB Query Array von Filialdokumenten

stname: "SC", 
dob : "1985", 
education {[ 
      {name : Lancaster, 
      year : 2013}, 

      {name : Manchester, 
      year : 2001, 
      grad : 2004}, 

      {name : Gambia, 
      year : 2001, 
      grad : 2011} 
     ]} 

Also habe ich nur Dokumente zurückgeben möchten, die Felder haben grad. Also sollten die letzten zwei Dokumente zurückgegeben werden.

habe ich versucht, die folgenden Abfragen, aber ohne Erfolg

db.applicants.find({"education" : { $elemMatch : {"grad" : {$exists : true}}}}, {"name":1, "education.grad" : 1}).pretty() 

gibt nur das erste Spiel, wie unten gezeigt, ist das erste Dokument

{ 
    "_id" : ObjectId("574dd5fcbda73af19e361a3f"), 
    "name" : "SC", 
    "education" : [ 
     { 

     }, 
     { 
      "grad" : "2004" 
     }, 
     { 
      "grad" : "2011" 
     } 
    ] 
} 

Auch die folgende Abfrage Ihnen ähnliche Ergebnisse liefert leer, Das ist ein leeres Dokument wo immer grad Feld nicht verfügbar ist.

db.applicants.find({"education.grad" : { $exists : true}}, {"education.grad" : {$exists : true}, "education.grad" : 1, name : 1 , dob : 1}).pretty() 
+0

Ich habe eine ähnliche Frage hier zu beantworten: http://stackoverflow.com/questions/37510908/mongodb-search-by-datetime-type-not-working/37511250 – felipsmartins

+0

@ felipsmartins, ich denke, dass sie ganz anders sind, Er versuchte, basierend auf einem Feld abzufragen. – fanbondi

+0

Oh, ich verstehe. Ich fürchte, du musst die Aggregation benutzen. – felipsmartins

Antwort

1

UPDATE ANTWORT:

db.applicants.aggregate({$unwind: "$education"}, 
{$match: {"education.grad":{$exists: true}}}, 
{$project: {"education.name": 1, "education.grad": 1, "_id": 0}}) 

Dies wird zwei Datensätze zurück, keine leeren Dokumente.

+0

Dies wird Ihnen die gleichen Ergebnisse wie meine obige Abfrage geben. Sie werden ein leeres Dokument haben, wo immer grad nicht verfügbar ist. – fanbondi

+0

@fanbondi das ist so seltsam. Ich habe versucht, Ihre Dokumente neu zu erstellen und die gleichen Abfragen wie Sie zu schreiben, und ich erhielt nicht die gleichen Ergebnisse, die Sie gepostet haben. Ich denke, dass etwas fehlt. Um es klar zu sagen, ich bekam kein leeres Dokument, weder mit meiner Frage noch mit Ihrer. – Tiramisu

+0

Hmm dann ist das interessant. Was muss dann das Problem sein. Ich benutze Mongo 3.2.5. Welche Version verwendest du? db.version() gibt Ihnen die Ergebnisse. – fanbondi