Чтобы узнать стек MEAN (используя Mongoose), я создаю приложение типа StackOverflow. У меня есть вопросы, которые хранятся в Mongo (v3.0.7), и у них есть поддокументы ответа.Mongoose возвращает NULL на findOneAndUpdate()
Я пытаюсь увеличить голос голоса, но когда вопрос возвращается, он равен нулю. Я почти уверен, что что-то не так с запросом, особенно там, где я пытаюсь получить ответ с идентификатором, который мне нужно изменить.
Вопрос Схема:
var questionsSchema = new mongoose.Schema({
answers: [ answerSchema ],
});
Ответ схемы:
var answerSchema = new mongoose.Schema({
votes: { type: Number, default: 0 },
});
Запрашивание _id возвращает нуль:
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);
});
UPDATE: запросов через Монго результат возвращается:
db.questions.find({_id: ObjectId('562e635b9f4d61ec1e0ed953'), 'answers._id': ObjectId('562e63719f4d61ec1e0ed954') })
НО, через Mongoose, NULL возвращается:
Question.find(
{_id: Schema.ObjectId('562e635b9f4d61ec1e0ed953'), 'answers._id': Schema.ObjectId('562e63719f4d61ec1e0ed954') },
Вы пробовали '' answers._id ': ObjectId (req.params.answerId) 'или'' answers._id ': new ObjectId (req.params.answerId) 'или что-то в этом роде? Кроме того, как насчет в CLI MongoDB, он что-то возвращается? –
Только что обновлено: хорошая идея в CLI, которая возвращает документ, но когда я добавляю ObjectID через Mongoose, null все еще возвращается. – Greg
Да, как я уже говорил, вам, вероятно, понадобится 'new ObjectId()' и объявить его в верхней части вашего файла. Это глупо, я все еще не уверен, почему это даже нужно сделать ... –