gpt4 book ai didi

mongodb - Mongoose 在 findOneAndUpdate() 上返回 NULL

转载 作者:可可西里 更新时间:2023-11-01 10:26:34 25 4
gpt4 key购买 nike

为了学习 MEAN 堆栈(使用 Mongoose),我正在创建一个 StackOverflow 类型的应用程序。我有存储在 Mongo(v3.0.7) 中的问题,它们有答案子文档。

我正在尝试增加答案的投票数,但是当返回问题时它为空。我很确定查询有问题,特别是我试图用我需要修改的 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') })

但是,通过 Mongoose,返回 NULL:

 Question.find(
{_id: Schema.ObjectId('562e635b9f4d61ec1e0ed953'), 'answers._id': Schema.ObjectId('562e63719f4d61ec1e0ed954') },

最佳答案

尝试使用 mongoose Types 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);
});

关于mongodb - Mongoose 在 findOneAndUpdate() 上返回 NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33369198/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com