【发布时间】:2019-12-22 16:00:07
【问题描述】:
我正在为我的聊天应用程序构建一个 API,并在下面编写了端点以在 MongoDB 中保存新消息。
消息本身是一个数组。
使用 Postman 测试此端点会在响应中返回新创建的消息,但该消息不会添加到我的消息数组中。
router.post('/:id/messages', async (request, response) => {
const chatMessage = new Message({
type: request.body.type,
body: request.body.body,
author: request.body.author
});
try {
const newMessage = await chatMessage.save({ $push: { chatMessage } });
response.status(201).json(newMessage);
} catch (error) {
response.status(400).json({ message: error.message });
}
});
这是我的 Mongoose 消息模式:
const mongoose = require('mongoose');
const messageSchema = new mongoose.Schema({
type: {
type: String
},
body: {
type: String
},
author: {
type: String
},
date: {
type: Date,
default: Date.now
}
});
module.exports = mongoose.model('Message', messageSchema);
关于我做错了什么的任何提示? 太感谢了! :-)
编辑_ Mongo DB Sample
【问题讨论】:
-
:id在那里做什么,你是在插入Message集合还是任何其他集合?另外,您的架构中的数组在哪里?您能否将您想要插入的任何集合中的文档样本提供给我们以便更好地理解.. -
感谢您的提问。我发现我的消息实际上已发布到我的数据库中。但是这个函数会打开一个新的集合——我不想要。我的数据库中的每个文档里面都有一个消息文档。这是我的信息应该去的地方。所以我认为定义消息的 url 就足够具体了。还有更多提示吗?
-
您能否提供您的示例文档,那么您的意思是
message :[]位于其他集合的文档中吗? (并且消息是一个对象数组)??Every document in my DB has a messages document inside--> 你这是什么意思?数据库将有收藏品,收藏品将有文件!所以你想要一个名为 message 的对象数组在哪个集合中,因为你不想要消息集合,那么消息应该进入一个集合的文档! -
请看我帖子末尾的图片。提供了我的数据库的外观
-
这种情况下应该基于
_id
标签: node.js mongodb express mongoose mongoose-schema