Я создаю приложение для социальных сетей с функцией обмена сообщениями. Моя проблема заключается в хранении сохраненных сообщений, где я ищу идентификатор отправителя, а затем использую .save () для сохранения сообщения.

Обновленная версия документа отлично регистрируется в обратном вызове, но по какой-то причине не сохраняется в базе данных: /

Любая помощь будет оценена

var MessageSchema = new Schema({
    client_id: Number,
    messages: [{ client_id: Number, messages: [] }] 

// вложенные сообщения должны выглядеть так [{type: "sent", message: "some message"}, .....]});

    socket.on("send_message", (data, friend_id, me_id) => {
        Message.findOne({ client_id: me_id }, (err, doc) => {
            doc.messages.map(
                i =>
                    i.client_id == friend_id
                        ? i.messages.push({ type: "sent", message: data })
                        : null
            );
            doc.save(function(err, updated) {
                if (err) {
                    console.error("ERROR!");
                }
            });
        });
    });
1
the_dude 18 Фев 2018 в 02:14

1 ответ

Лучший ответ

Сначала вам нужно явно определить схему массива вложенных сообщений:

var MessageSchema = new Schema({
    client_id: Number,
    messages: [{ 
        client_id: Number, 
        messages: [{
            type: { type: String },
            data: String
        }] 
    }]
}) 

Для сохранения данных потребуется использовать findOneAndUpdate() метод следующим образом:

Message.findOneAndUpdate(
    { 'client_id': me_id, 'messages.client_id': friend_id }, 
    { '$push': {'messages.$.messages': { 'type': 'sent', 'message': data } },
    { 'new': true } 
    (err, message) => {
        if (err) {
            console.error("ERROR!");
        } else {
            console.log(message);
        }
    });
});
0
chridam 18 Фев 2018 в 12:13