我到处寻找,无法弄清楚这一点。我们如何在MongoDB / Mongoose中为upserted子文档返回自动生成的_id?
这是我的架构:
var commentsSchema = new mongoose.Schema({
sid : { type : mongoose.Schema.ObjectId }, // (story who these comments belong to)
seq : Number, // bucket #
cmts : [ {
tx:String,
un : String, //username
u:{ type : mongoose.Schema.ObjectId }, //user id
t:Date
} ]
});
这是我的查询:
self.model('Comments').update({
"sid" : sid,
"seq" : seq
}, {
'$addToSet' : {
"cmts" : {
"tx":text,
"u" : uid,
"un" : uname,
"t":new Date(),
}
}
},
{
"upsert" : true
}, function(err, comment) {
if (err)
return cb(err);
console.log("le comments:"+JSON.stringify(comment));
cb(err, comment);
});
非常感谢任何帮助,谢谢! 亨利
答案 0 :(得分:0)
Mongoose的update
函数只会在其回调中返回err
和numAffected
,因此您无法在此时知道_id。最简单的方法是在更新完成后查询它。
var query = {
sid: sid,
seq: seq
};
var data = {
$addToSet : {
cmts : {
tx: text,
u: uid,
un: uname,
t: new Date(),
}
}
};
var options = {
upsert: true,
};
Comments.update(query, data, options, function(err, numAffected) {
if (err) ...
Comments.findOne(query, function(err, comment) {
if (err) ...
console.log(comment._id);
...
})
});
要知道您的评论是否已插入或更新,您可以在更新前始终执行findOne
查询,以查看其是否存在。