私のコレクションに文書を保存しようとしていますが、保存が成功した場合は、この同じ文書の_idを返してください。問題は、どちらの場合でも、mongooseから作成されたモデルか、コールバック関数のどちらかで、_idに未定義の値が得られることです。基本的に、_idを取得する唯一の方法は、そのプロパティの1つでドキュメントを検索してから値を取得することです。このアプローチは、私が欲しいものではなく、現在何をしようとしているのがうまくいくかを知っています。Node.js&Mongoose、回復できません_id
var createTrophy = new Trophy({
name : post.name,
accessCode : post.password,
description : post.description,
members : [id]
});
Trophy.findOne({name:post.name}, function(err, trophy) {
if(err){
console.log('Mongoose: Error: ' + err);
res.send('Error db query -> ' + err);
}
else if(trophy){
console.log('Trophy ' + trophy.name + ' already existant');
res.send('Trophy ' + trophy.name + ' already existant');
}else{
createTrophy.save(function(err, doc){
var uid = createTrophy._id;
if (err) {
console.log('Error in trophy saving:' + err);
res.send('Error in trophy saving:' + err);
}else{
User.findOne({_id:post.id}, function(err, user) {
if(err){
console.log('Mongoose: Error: ' + err);
res.send('Error db query -> ' + err);
}
else if(user){
console.log(doc._id + ' ' + uid);
user.trophyLink = doc._id;
res.send(user);
//user.save(function(err){
// if(err){res.send('Couldnt update trophy of profile');}
//});
}
else{
console.log('User id Inexistant');
res.send('User id Inexistant');
}
});
}
});
}
});
});
スキーマ
var Trophy = new Schema({
_id : ObjectId,
name : String,
accessCode : String,
description : String,
//reference to User ID
members : [Number],
comments :[Comment]
});
これは動作していたようです。問題を修正したerr.toString()の部分か、新しいオブジェクトやスキーマの変更を宣言する方法はわかりませんが、ありがとうございます。 – guiomie
私はオブジェクトを宣言する方法がそれを解決したことを確認できます: - 新しいThing({})を実行するとき、_idは未定義です。 - 新しいThing()を実行し、その小道具を設定すると、機能しました。 – postback