gpt4 book ai didi

node.js - 无需进行保存舞蹈即可在 Mongoose 中保存关联的方法?

转载 作者:搜寻专家 更新时间:2023-11-01 00:45:31 26 4
gpt4 key购买 nike

假设我有这个模式。

   var Topic = new Schema({
owner: {
type: Schema.Types.ObjectId,
ref: 'User'
},
category: {
type: Schema.Types.ObjectId,
ref: 'Category'
},
title: String,
date: Date,
lastPost: Date,
likes: Number,
posts: [{
type: Schema.Types.ObjectId,
ref: 'Post'
}]
});

var Post = new Schema({
topic: {
type: Schema.Types.ObjectId,
ref: 'Topic'
},
body: String,
date: Date,
owner: {
type: Schema.Types.ObjectId,
ref: 'User'
}
});

如果我想保存主题然后将主题添加到帖子上的主题关联,然后推送到主题对象上的帖子数组,我必须做这个奇怪的舞蹈。

exports.create = function (req, res) {

var data = req.body.data;

var topic = new Topic();
topic.title = data.topic.title;
topic.date = new Date();
topic.lastPost = new Date();

topic.save(function (err, topicNew) {

if (err) res.send(err, 500);

var post = new Post();
post.body = data.post.body;
post.topic = topicNew;

topicNew.posts.push(post);

topic.save(function (err, t) {

if (err) res.send(err, 500);
post.save(function (err, p) {
if (err) res.send(err, 500);
return res.json(t);
});
});
});
};

我在文档中没有看到任何可以帮助我解决这个问题的内容。感谢您的帮助。

最佳答案

首先实例化主题和帖子。在第一个主题保存之前将帖子推送到主题中。然后保存主题,如果成功保存帖子。 MongoDB 对象 ID 由驱动程序在您执行 new Post() 时创建,因此您可以在保存之前将其保存在 topic.posts 数组中。

这将使您的 3 步舞成为 2 步舞,但在宏伟的计划中,这似乎与类(class)基本相同,所以我不会将我的期望值设定得比这低很多。很少有有用的现实世界路由可以通过单个 DB 命令实现。

您还可以使用中间件函数作为一种无需嵌套即可获得顺序异步操作的方法。您可以使用 req 对象来存储中间结果并将它们从一个中间件传递到下一个中​​间件。

关于node.js - 无需进行保存舞蹈即可在 Mongoose 中保存关联的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19738535/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com