Мангуст не толкает в массив

1

Мой код:

Модель:

var mongoose = require('mongoose');

var eventSchema = new mongoose.Schema({
    'eventTitle': String,
    'location': String,
    'startDate': String,
    'endDate': String,
    'startTime': String,
    'endTime': String,
    'createdBy': mongoose.Schema.Types.ObjectId, // Here we will store the _ID from the user EOSP.
    'attendants': {
        'seekers': [mongoose.Schema.Types.ObjectId],
        'employers': [],
    },
    'isFinished': {'type': Boolean, 'default': false},
    'uploadedResumes': Number,
    'downloadedResumes': Number,
    'survey': {
        'seekers': [],
        'employers': [],
        'host': [],
    }
});

module.exports = mongoose.model('event', eventSchema);

маршрутизатор:

.post(async (req, res) => {
    let {user, params} = req;
    let {eid, uid} = params;
    eid = mongoose.Types.ObjectId(eid);
    uid = mongoose.Types.ObjectId(uid);

    user = user ? user : await Account.findById(uid).catch(e => console.log(e));
    if (user.accType.toLowerCase() === 'seeker') {
        const {
            rating,
            recommendation,
            websiteEaseOfUse,
            chatHelpfulness,
            skillsSuitability,
            tips,
        } = req.body;
        const data = {
            userId: user._id,
            rating,
            recommendation,
            websiteEaseOfUse,
            chatHelpfulness,
            skillsSuitability,
            tips,
        };
        console.log(data);
        Event.findOneAndUpdate({'_id': eid}, {
            $push: {
                'survey.seeker': {
                    userId: user._id,
                    rating,
                    recommendation,
                    websiteEaseOfUse,
                    chatHelpfulness,
                    skillsSuitability,
                    tips,
                },
            },
        }, {$upsert: true,}).then(r => console.log('pushed', r.survey.seekers)).catch(e => console.log(e));
    }
    const title = await Event.findById(eid).then(r => r.eventTitle).catch(e => console.log(e));
    const event = await functions.getCurrentEvent();
    res.render('survey/thanks', {
        title: title,
        user: user,
        event: event
    })
});

Так что этот код должен сделать, это взять данные, переданные в маршрутизатор по почте (это на самом деле работает), и поместить их в массив (это не работает).

Вот журнал:

pushed []

Поэтому мой вопрос: почему, хотя консоль говорит, что она прошла (console.log('push')), она не помещает туда данные? Что мне не хватает?

  • 0
    Сохраняется ли в базе данных?
  • 0
    У меня была та же проблема, проблема была в версии Mongoose, ( $push did not work ), с помощью $concat я решил это.
Теги:
express
mongoose

2 ответа

0

Единственное, что я могу увидеть здесь - это new: true опция new: true которую следует использовать для получения обновленного документа.

Event.findOneAndUpdate(
  { _id: eid },
  {
    $push: {
      "survey.seeker": {
        userId: user._id,
        rating,
        recommendation,
        websiteEaseOfUse,
        chatHelpfulness,
        skillsSuitability,
        tips
      }
    }
  },
  { upsert: true, new: true }
)
  .then(r => console.log("pushed", r.survey.seekers))
  .catch(e => console.log(e));
0

Вы используете неправильный ключ, используйте survey.seekers вместо survey.seeker

  .post(async (req, res) => {
        let {user, params} = req;
        let {eid, uid} = params;
        eid = mongoose.Types.ObjectId(eid);
        uid = mongoose.Types.ObjectId(uid);

        user = user ? user : await Account.findById(uid).catch(e => console.log(e));
        if (user.accType.toLowerCase() === 'seeker') {
            const {
                rating,
                recommendation,
                websiteEaseOfUse,
                chatHelpfulness,
                skillsSuitability,
                tips,
            } = req.body;
            const data = {
                userId: user._id,
                rating,
                recommendation,
                websiteEaseOfUse,
                chatHelpfulness,
                skillsSuitability,
                tips,
            };
            console.log(data);
            Event.findOneAndUpdate({'_id': eid}, {
                $push: {
                    'survey.seekers': {
                        userId: user._id,
                        rating,
                        recommendation,
                        websiteEaseOfUse,
                        chatHelpfulness,
                        skillsSuitability,
                        tips,
                    },
                },
            }, {$upsert: true,}).then(r => console.log('pushed', r.survey.seekers)).catch(e => console.log(e));
        }
        const title = await Event.findById(eid).then(r => r.eventTitle).catch(e => console.log(e));
        const event = await functions.getCurrentEvent();
        res.render('survey/thanks', {
            title: title,
            user: user,
            event: event
        })
    });

Ещё вопросы

Сообщество Overcoder
Наверх
Меню