내 컬렉션에 문서를 저장하려고하는데 저장이 성공하면이 동일한 문서의 _id를 반환하십시오. 문제는 몽구스에서 생성 된 모델이나 콜백 리턴에서 두 경우 모두 내 _id에 정의되지 않은 값을 얻는 것입니다. 기본적으로 _id를 얻는 유일한 방법은 속성 중 하나를 사용하여 문서를 검색 한 다음 값을 가져 오는 것입니다. 이 접근법은 내가 원하는 바가 아니며, 현재 무엇을해야하는지 알면 효과가있다.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');
}
});
}
});
}
});
});
당신이 당신의 스키마에 _id
를 제공 할 필요가 없습니다
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