2017-06-21 28 views
1

我試圖從陣列中只提取子文件有以下模式:如何僅在貓鼬中獲取子文檔?

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" 
    } 
] 

我已經嘗試過使用雙選擇,如:

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

不過是給出了同樣的結果

+1

即使我叫.populate()我仍然在頂部 – Saad

回答

2

試試這個:

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

文檔here

1

這個產量預計將「選擇」返回,而只是你可以準備返回的數據作爲你需要如下:

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

這似乎是正確的越來越庫,但我得到的result.library不確定的,當我試圖CONSOLE.LOG()它 – Saad

+0

它應該工作,看起來你的代碼有問題發送給我 –