为了学习MEAN堆栈(使用Mongoose),我正在创建一个StackOverflow类型的应用程序。我的问题存储在Mongo(v3.0.7)中,并且它们具有“答案”子文档。
我正在尝试增加答案的投票数,但是当问题返回时,它为null。我很确定查询有问题,特别是在我尝试获取需要修改的ID的地方。
问题模式:
var questionsSchema = new mongoose.Schema({
answers: [ answerSchema ],
});
答案模式:
var answerSchema = new mongoose.Schema({
votes: { type: Number, default: 0 },
});
查询_id返回null:
Question.findOneAndUpdate(
{_id: req.params.questionId, 'answers._id': req.params.answerId },
{ $inc: { 'answers.$.votes': 1 } },
{ new: true },
function(err, question){
if (err) { return next(err); }
//question is returned as NULL
res.json(question);
});
查询0票的作品:
Question.findOneAndUpdate(
{_id: req.params.questionId, 'answers.votes': 0 },
{ $inc: { 'answers.$.votes': 1 } },
{ new: true },
function(err, question){
if (err) { return next(err); }
//question is returned as NULL
res.json(question);
});
更新:通过Mongo查询返回结果:
db.questions.find({_id: ObjectId('562e635b9f4d61ec1e0ed953'), 'answers._id': ObjectId('562e63719f4d61ec1e0ed954') })
但是,通过猫鼬返回NULL:
Question.find(
{_id: Schema.ObjectId('562e635b9f4d61ec1e0ed953'), 'answers._id': Schema.ObjectId('562e63719f4d61ec1e0ed954') },
尝试使用猫鼬类型ObjectID
http://mongoosejs.com/docs/api.html#types-objectid-js:
var ObjectId = mongoose.Types.ObjectId;
Question.find({
_id: '562e635b9f4d61ec1e0ed953',
'answers._id': new ObjectId('562e63719f4d61ec1e0ed954')
})
原始更新问题的最终答案:
Question.findOneAndUpdate(
{_id: req.params.questionId,
'answers._id': new ObjectId(req.params.answerId) },
{ $inc: { 'answers.$.votes': 1 } },
{ new: true },
function(err, question){
if (err) { return next(err); }
res.json(question);
});
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句