2017-06-21 3 views
1

Ich versuche nur sub-Dokument aus einem Array zu extrahieren hat folgendes Schema:Wie bekomme ich ein Unterdokument nur in Mungo?

const UserSchema = Schema({ 
name: { 
    type: String 
},library:[{ 
    story:{type: Schema.Types.ObjectId,ref: 'Story'} 
}], 
}); 

i zu verwenden versucht:

module.exports.getUserStories = function(userId, callback){ 
    User.findOne({_id: userId },callback) 
    .select('library.story') 
}; 

und es gibt dieses Ergebnis:

{ 
    "_id": "5949615072e15d2b34fa8f9d", 
    "library": [ 
    { 
     "story": "592ae46cf2a0ba2b208cb092" 
    }, 
    { 
     "story": "592ae608df26d80790092fe9" 
    }, 
    { 
     "story": "592ae46cf2a0ba2b208cb092" 
    } 
    ] 
} 

aber was ich erwarte, ist nur das:

[ 
    { 
    "story": "592ae46cf2a0ba2b208cb092" 
    }, 
    { 
    "story": "592ae608df26d80790092fe9" 
    }, 
    { 
    "story": "592ae46cf2a0ba2b208cb092" 
    } 
] 

Ich habe bereits versucht Doppel Auswahl zu verwenden wie:

module.exports.getUserStories = function(userId, callback){ 
    User.findOne({_id: userId },callback) 
    .select('library.story') 
    .select('story') 
}; 

Aber wird das gleiche Ergebnis

+1

auch wenn ich genannt .populate() Ich bin immer noch Bibliothek immer auf der Oberseite – Saad

Antwort

2

Versuchen Sie dieses:

module.exports.getUserStories = function(userId, callback){ 
    User.find({_id: userId },{'library.story'}).then(function(user){ 
     if(user){ 
      callback(user.library); 
     }}); 
}; 

Docs here

1

Diese Ausgabe von „wählen Sie“ zurückzukehren wird erwartet, sondern einfach können Sie die zurückgegebenen Daten vorbereiten zu sein Sie müssen, wie folgend:

User.findOne({_id: userId }).select('library').then(function(result){ 
    if(result){ 
    //If there is returned item 
    var stories = result.library; 
    //Continue ... 
    } 

},function(error){ 
    //Error handling 
}) 
+0

Es ist richtig scheint, aber ich bin auf result.library immer undefiniert, wenn i(), um zu console.log versucht – Saad

+0

Es sollte funktionieren, es scheint, dass etwas in Ihrem Code falsch ist, senden Sie es mir –

Verwandte Themen