我有 TweetModel,我需要在里面创建 RatingModel,而且 RatingModel 必须有相同的 TweetModel id,因为我想链接它们以进一步删除。 也许还有其他方法可以为猫鼬中的帖子评分。 我将非常感谢您的帮助
const tweet = await TweetModel.create({
text: req.body.text,
images: req.body.images,
user: user._id,
rating: ..., // => {retweets[], likes[]}
})
tweet.save()
答案 0 :(得分:0)
假设您已经知道如何创建架构,您可以为推文和评分创建 2 种不同的架构。这将创建 2 个独立的集合,从而更易于管理。
const { text, images } = req.body
const objectId = new mongoose.Types.ObjectId() //create a objectId first.
await TweetModel.updateOne({ _id }, { text, images, user: user._id }, { upsert: true })
await RatingModel.updateOne(....)
我们在这里使用 updateOne 并带有 {upsert: true}
选项,如果记录 _id
不存在,我们将在其中创建新记录。
您可以使用 mongoose.populate()
轻松获得评分更多关于 { upsert: true }
- https://docs.mongodb.com/manual/reference/method/db.collection.update/
如果你想用一半的时间创建记录。
const [ tweet, rating ] = await Promise.all([
TweetModel.updateOne({ _id }, { text, images, user: user._id }, { upsert: true })
RatingModel.updateOne(....)
])
使用 Promise.all 可以同时执行两个更新请求。
如果您想在推文中填充评分,请将其添加到您的架构中..
TweetModel.virtual('rating', {
ref: 'Rating',
localField: '_id',
foreignField: '_id',
});