вам не нужно указывать _id
в вашей схеме, она будет сгенерирована автоматически.и если вы хотите, чтобы имя было уникальным, вы также можете настроить это в схеме.если members
предполагается, что это "реальный" пользовательский _ids, тогда попробуйте что-то вроде [ObjectId]
.
var TrophySchema = new Schema({
name: {type:String, required:true, unique:true},
accessCode: String,
description: String,
//reference to User ID
members: [ObjectId],
comments: [Comment]
});
, и я не знаю, работает ли это
var trophy = new Trophy({...data...});
какВы сделали это, я всегда делаю это так:
var trophy = new Trophy();
trophy.name = "my name";
// ...
и _id
должны быть установлены, как только вы создаете объект (http://stackoverflow.com/questions/6074245/node-mongoose-get-last-inserted-id).
, поэтому просто сделайте это так:
trophy.save(function (err) {
if (err) {
if (err.toString().indexOf('duplicate key error index') !== -1) {
// check for duplicate name error ...
}
else {
// other errors
}
res.send('Error in trophy saving:' + err);
}
else {
User.findOne({_id:post.id}, function(err2, user) {
if (err2) {/* ... */}
else if (user) {
user.trophyLink = trophy._id;
res.send(user);
}
}
}
});
важно то, что сохранение не возвращает трофей, который вы должны использовать тот, который вы создали сами.