2017-03-24 1 views
0

Ich habe ein einfaches eingebettetes Dokument:Mongoose FindOne gibt leeres Array-Feld

{ 
    "username":"user001", 
    "name":"John", 
    "tasks":[ 
     {   
      "id":0, 
      "title":"Candy", 
      "description":"Lots of candy for you", 
      "category":"food", 
      "cost":2500, 
      "candyTypes":[ 
       {"name":"gum", "type":"sweet", "price":"2"}, 
       {"name":"chocolate", "type":"tasty", "price":"3"} 
      ] 
     } 
    ] 
} 

Wenn ich versuche, die Auftragsdaten durch den Mongo Shell abfragen, ich alles bekommen:

db.users.findOne({ 'username': 'user001', 'tasks.id':4 }, {'tasks.$':1}) 

/* returns */ 

"tasks":[ 
    {   
     "id":0, 
     "title":"Candy", 
     "description":"Lots of candy for you", 
     "category":"food", 
     "cost":2500, 
     "candyTypes":[ 
      {"name":"gum", "type":"sweet", "price":"2"}, 
      {"name":"chocolate", "type":"tasty", "price":"3"} 
     ] 
    } 
] 

Aber als ich versuchen, das gleiche in Mungo zu tun, kommt das candyTypes Array leer zurück:

Users.findOne({ 'username': username, 'tasks.id':taskId }, {'tasks.$':1}, function (err, data) { 
     console.log(data); 
}); 

/* returns */ 

"tasks":[ 
    {   
     "id":0, 
     "title":"Candy", 
     "description":"Lots of candy for you", 
     "category":"food", 
     "cost":2500, 
     "candyTypes":[] 
    } 
] 

ich bin ziemlich neu in MongoDB und Mungo, aber nachdem ich die Dokumentation gesucht und durchgesehen habe, kann ich nicht herausfinden, was mir fehlt.

UPDATE

Ich Paar Benutzer es angefordert wird, so ist hier mein Mungo Schema:

var UserSchema = new mongoose.Schema({ 
    username:String, 
    name:String, 
    tasks:[{ 
     id: Number, 
     title: String, 
     description:String, 
     category: String, 
     cost: Number, 
     candyTypes:[{ 
      title:String, 
      type:String, 
      value:String 
     }] 
    }] 
}); 
+0

Können Sie uns Ihre Schemadefinition zeigen? – Veeram

+0

versuchen Sie einfach, Ihren Benutzernamen und Ihre Task-ID zu trösten, sind sie die gleichen, die Sie für Mongo-Shell verwenden –

+0

Ja, sie sind die gleichen. Tatsächlich habe ich nur einen einzigen Testbenutzer in dieser db –

Antwort

0

Mit Mongoose, müssen Sie candyTypes Array füllen:

Users.findOne({ 'username': username, 'tasks.id':taskId }, {'tasks.$':1}) 
.populate('candyTypes') 
.exec(function (err, data) { 
    console.log(data); 
}); 

Siehe docs : http://mongoosejs.com/docs/populate.html

+0

Hallo Tyler, danke für deine Hilfe. Seltsamerweise habe ich versucht, 'populate()' direkt vor dem Posten dieser Frage zu verwenden, und ich habe immer noch die gleiche Ausgabe. –

+0

Ich sehe, dass candyTypes ist eigentlich ein Array innerhalb der Aufgaben-Array, so müssen Sie möglicherweise '.populate ('tasks.candyTypes')' –

+0

Ich versuchte '.populate ('tasks.candyTypes')' und bekam einen Fehler. Dann habe ich '.populate ('tasks. $.candyTypes ') 'und bekam keinen Fehler, aber die gleiche Ausgabe wie zuvor. –

0

Ich glaube, es hängt damit zusammen, dass Sie ein Feld namens type deklarieren, das in Mongoose auch eine besondere Bedeutung hat, nämlich die Art eines Feldes zu bezeichnen.

Wenn Sie dieses Feld in etwas anderes umbenennen (candyType), wird es wahrscheinlich besser funktionieren.

Alternativ können Sie die Option typeKey verwenden, damit Mungo einen anderen Eigenschaftsnamen als Feldtyp verwendet.

Nebenbei enthält Ihr Dokument ein Feld price, aber Ihr Schema nennt es value.

Verwandte Themen