我有三个模式,一个模式引用了另外两个模式:
userSchema
export class AppComponent {
datesSelected:NgbDateStruct[]=[];
change(value:NgbDateStruct[])
{
this.datesSelected=value;
}
postSchema
{ name: String }
评论模式
{ content: String }
如何以理智,可扩展的方式为该数据库添加种子?甚至使用bluebird都保证它很快就会成为写作的噩梦。
到目前为止,我的尝试涉及多个嵌套的Promise,并且很难维护:
{
content: String,
user: { ObjectID, ref: 'User' },
post: { ObjectID, ref: 'Post' }
}
这显然不是正确的方法。我想念什么?
答案 0 :(得分:1)
不确定bluebird,但是nodejs Promise.all应该可以完成工作:
Promise.all([
User.create([{ name: 'alice' }]),
Post.create([{ content: 'foo' }])
]).then(([users, posts]) => {
const comments = [
{ content: 'bar', user: users[0], post: posts[0] }
];
return Comment.create(comments);
})
答案 1 :(得分:1)
如果要使用自动引用为数据库添加种子,请使用Seedgoose。 这是最容易使用的播种机。您不需要编写任何程序文件,而只需编写数据文件。并且Seedgoose为您处理智能引用。顺便说一下,我是该软件包的作者和维护者。
答案 2 :(得分:0)
注意: Node Promise.all将确保两个查询都正确执行,然后将结果返回到Array:[Users,Posts], 如果在执行任何查询期间遇到任何错误,则将由Promise.all的catch块来处理。
let queryArray = [];
queryArray.push(User.create([{ name: 'alice' }]));
queryArray.push(Post.create([{ content: 'foo' }]));
Promise.all(queryArray).then(([Users, Posts]) => {
const comments = [
{ content: 'bar', user: Users[0], post: posts[0] }
];
return Comment.create(comments);
}).catch(Error => {
console.log("Error: ", Error);
})