2017-05-10 10 views
0

オブジェクトの配列で.mapを呼び出すと、それはTypeErrorのエラーをスローしています:friends.mapは関数ではありません。は、マングースで明示的にオブジェクトの配列にマップ関数を呼び出すことができません

私はバニラjsオブジェクトでそれを行うとき、それは正常に動作しますが、それは引用符でidと_id値を囲んだ後です。

その理由は、ObjectIdがMongooseにありますか?もしそうなら、私はそれをどのように修正するのですか?あなたのコードで

var UserSchema = new Schema({ 
 
    username : String, 
 
    firstName : String, 
 
    lastName : String 
 
\t friends : [{ id: { type: Schema.Types.ObjectId, ref: 'User'}, status: Number }] 
 
}); 
 

 
app.get('/getFriends', requireLogin, function(req, res) { 
 
    User.findOne({ _id: req.user.id }, 'friends') 
 
    .populate({ 
 
    path: 'friends.id', 
 
    model: 'User', 
 
    select: 'username firstName lastName -_id' 
 
    }) 
 
    .exec(function(err, friends) { 
 
    console.log(typeof(friends)) 
 
    console.log(friends) 
 
    friends = friends.map(function(v) { 
 
     delete(v._id); 
 
     delete(v.status); 
 
     return v; 
 
    }); 
 
    res.json(friends); 
 
    }) 
 
}) 
 

 

 
events.js:163 
 
     throw er; // Unhandled 'error' event 
 
    ^
 

 
TypeError: friends.map is not a function

the output of console.log(friends) 
 

 
[ { _id: 590bbb88858367c9bb07776e, 
 
    status: 2, 
 
    id: 590bba9c858367c9bb077759 }, 
 
    { _id: 590bbb95858367c9bb07776f, 
 
    status: 2, 
 
    id: 590bbad5858367c9bb07775f }, 
 
    { _id: 590bbb9e858367c9bb077770, 
 
    status: 2, 
 
    id: 590bbb05858367c9bb077765 }, 
 
    { _id: 590bbbaa858367c9bb077771, 
 
    status: 2, 
 
    id: 590bbaf2858367c9bb077763 }, 
 
    { _id: 590bbbb6858367c9bb077772, 
 
    status: 2, 
 
    id: 590bbae5858367c9bb077761 }, 
 
    { _id: 590bbbc5858367c9bb077773, 
 
    status: 2, 
 
    id: 590bbabe858367c9bb07775d }, 
 
    { _id: 590bbbef858367c9bb077774, 
 
    status: 2, 
 
    id: 590bbab2858367c9bb07775b } ]

答えて

1

、あなたはのparamsで_idで文書を照会するUserモデルに.findOneを呼び出しています。

.findOneは、1つのマングース文書(配列ではない)を返します。したがって、execのコールバックの2番目の引数は、その_idを持つユーザーを参照する必要があります。あなたが提供したログ出力をどのように取得するのかはよく分かりません。次の行に沿って試してみてください。

app.get('/getFriends', requireLogin, function(req, res) { 
    User.findOne({ _id: req.user.id }, 'friends') 
    .populate({ 
    path: 'friends.id', 
    model: 'User', 
    select: 'username firstName lastName -_id' 
    }) 
    .exec(function(err, user) { 
    var friends = user.friends.map(function(v) { 
     delete(v._id); 
     delete(v.status); 
     return v; 
    }); 
    res.json(friends); 
    }) 
}) 
関連する問題