javascript - Express JS - 无法将数组推送到 MongoDB 中的表

标签 javascript node.js mongodb mongoose

我的 MongoDB 数据库中有两个表。

1) 用户 2) 留言

在我的应用程序中,当用户创建“消息”时,我试图将 messages 作为数组插入到 User 表中。

为User和Messages定义的Schemas如下所示

消息方案

var schema = new Schema({
content: {type: String, required: true},
user: {type: Schema.Types.ObjectId, ref: 'User'}
});

用户架构

var schema = new Schema({
    firstName: {type: String, required: true},
    lastName: {type: String, required: true},
    password: {type: String, required: true},
    email: {type: String, required: true, unique: true},
    messages: [{type: Schema.Types.ObjectId, ref: 'Message'}]
});

我定义了一个 post 方法,如下所示:

router.post('/', function (req, res, next) {
var decoded = jwt.decode(req.query.token);
User.findById(decoded.user._id, function (err, user) {
    if (err) {
        return res.status(500).json({
            title: 'An error occurred',
            error: err
        });
    }
    var message = new Message({
        content: req.body.content,
        user: user._id
    });
    console.log("Message:"+ message);
    message.save(function (err, result) {
        if (err) {
            return res.status(500).json({
                title: 'An error occurred',
                error: err
            });
        }
        user.messages.push(result);
        user.save();
        console.log('Saved...'+user);

        res.status(201).json({
            message: 'Saved message',
            obj: result
        });
    });
  });
});

在这里,我首先检查用户是否存在,然后将发送的消息插入带有 userid 引用的“消息”表中,并尝试通过将消息插入列中来在用户表中创建相应的条目将消息作为数组接受的类型。

在运行应用程序时,在我的控制台中我可以看到附加到用户集合的消息对象,如下所示:

enter image description here

但是当我检查我的数据库以查看消息是否已附加时,它显示消息数组为空:

enter image description here

不确定将数组附加到集合时哪里出错了。

最佳答案

做一个小改动:

message.save(function (err, result) {
        // ... your other code 

        user.messages.push(result.id || result._id); // CHANGE THIS LINE
        user.save();
        console.log('Saved...'+user);

        res.status(201).json({
            message: 'Saved message',
            obj: result
        });

    });

关于javascript - Express JS - 无法将数组推送到 MongoDB 中的表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49763130/

相关文章:

node.js - Node IOREDIS : how to set expire time for a key?

javascript - 当 watch 设置为 true 时,Webpack 运行不干净

javascript - js和jquery的OOP框架

javascript - 单击单选按钮后更改 2 <div> 类的更好方法是什么?

javascript - NodeJS中的Module.exports,输出函数

node.js - 如何用大数据集填充 Mongoose

javascript - 如何使用Mongoose使用MongoDB事务?

javascript - 将 _id 中的创建日期字段添加到所有 mongo 文档中

javascript - JQuery 节点检查是否不为空

javascript - 单击时未定义 C# razor 对象