如何获取子文件只在mongoose?

我试图从数组中提取只有子文档具有以下架构:

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

我试图使用:

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

并给出了这个结果:

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

但我期望得到的只是这个:

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

我已经尝试使用双重select,如:

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

但是是一样的结果

试试这个:

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

文档在这里

这个输出预计会通过“select”返回,但是您可以根据需要准备返回的数据,如下所示:

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