我有一个简单的控制器,可以为用户创建一个帖子。另一个架构与之链接。当我尝试创建一个新的post时,我需要获取post的id,这样我就可以将其他模式链接到它。
下面是schema:
const mongoose = require("mongoose");
const User = require("./User");
const View = require("./View");
const ArticleSchema = new mongoose.Schema({
title: {
type: String,
required: true,
trim: true,
},
body: {
type: String,
required: true,
},
status: {
type: String,
default: "public",
enum: ["public", "private"],
},
user: {
type: mongoose.Schema.Types.ObjectId,
ref: "User",
},
views: {
type: mongoose.Schema.Types.ObjectId,
ref: "View",
},
createdAt: {
type: Date,
default: Date.now,
},
});
module.exports = mongoose.model("Article", ArticleSchema);
当我想链接user字段时,这是很好的,因为我已经将其存储在内存中。
但是view字段需要该特定文档的postId。如果不先创建文档,我就得不到它。
我的创建后控制器:
module.exports.createArticleController = async function (req, res) {
try {
req.body.user = req.User._id;
const article = await Article.create(req.body).exec()
res.redirect(`/${article.title}/${article._id}`);
} catch (e) {
console.error(e);
}
};
所以我的问题是
我如何在执行model.create()的过程中获得id,以便我可以将视图链接到该id。也许有些东西使用 *this * 运算符
我不想在创建后使用更新。
4条答案
按热度按时间wmtdaxz31#
您可以在创建Model示例后立即获取对象ID,或者创建自己的对象ID并保存它们。
我是这样做到的:
或者您可以创建它们并将其保存到数据库。
继续阅读
How do I get the object Id in mongoose after saving it.
Object Id's format and usage
7uzetpgm2#
您可以生成自己的id并保存它
c6ubokkw3#
你可以像这样简单地创建一个schema对象:
这是来自我的一个项目,因为MongoDB的ObjectId是基于操作机器和创建时间的,它不需要数据库来生成ID。你现在可以访问task._id来获取你的id而不保存它。
kdfy810k4#
现在您可以先构建然后保存