我有此设置
var NotesSchema = new mongoose.Schema({
title: String,
category: [{ type: mongoose.ObjectId, ref: "Categories", default: [] }],
},{ timestamps: { createdAt: 'created_at' } });
var CategoriesSchema = new Schema({
name: {type: String, required: true}
})
var Notes = mongoose.model('Notes', NotesSchema);
var Cat = mongoose.model('Categories', CategoriesSchema);
如果我想创建新的笔记和类别,我会这样做
.get('/new', async (req, res) => {
var post1= {
title : "Post: books, thriller, crime and classics",
favorite : true,
categories:[ 'thriller', 'books']
}
try{
var note = post1.categories.map( (cat)=>{
var ca = new Cat({name: cat})
ca.save()
return ca._id
})
post1.category = note
const newNote = new Notes(post1);
const n = await newNote.save()
res.send(n)
} catch(error) {
console.error(error);
};
})
如果我要创建一个包含一些新类别的新笔记,则会卡住。
var post1= {
...
categories:[ 'thriller', 'books', 'classics']
}
“惊悚”和“书籍”已经存在,但“经典”不存在。
我尝试过Cat.find({"name": {$in: post1.categories}}).exec()
,但似乎无法浏览这些数据。
所有示例教程似乎一次只添加一个新条目。
答案 0 :(得分:0)
在您的post1.categories.map
回调中,您正在创建Cat文档并对其调用save()
,但是您不等待返回的诺言。因此Note
是在兑现这些承诺之前创建的,因此post1.category
将是一个空数组。
您可以通过等待类别的保存承诺来解决此问题:
const savePromises = post1.categories.map((cat) => {
const ca = new Cat({name: cat})
return ca.save();
})
const categoryIds = (await Promise.all(savePromises)).map(category => category._id);
post1.category = categoryIds;
// rest of your code