node.js - Mongoose 保存方法不起作用

标签 node.js mongodb mongoose

我正在创建一个具有消息传递功能的社交媒体应用程序,我的问题是存储已保存的消息,我在其中查找发件人的 ID,然后使用 .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!");
                }
            });
        });
    });

最佳答案

您需要首先显式定义嵌​​套消息数组架构:

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);
        }
    });
});

关于node.js - Mongoose 保存方法不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48846849/

相关文章:

javascript - Jade使用localStorage获取nodejs View

node.js - 防止 require(...) 在父目录中查找模块

mongodb - MongoDB GridFS 使用 Node.JS 保存文件的问题

MongoDB嵌套对象字段深度限制

javascript - Node.js Mongoose 返回第二层的所有非空字段

node.js - mongodb 在使用数字进行文本搜索时性能不佳

django - django <-> 应用程序服务器(node.js)之间的通信方法?

node.js - npm install 失败并出现 404 错误(/@fortawesome%2fpro-regular-svg-icons - 未找到)尽管设置了标记

node.js - MongoDB:updateOne 查询,如果存在则设置未设置的值

javascript - Mongodb 聚合嵌套组与最近更新的文档