如何填充新创建的猫鼬文档?
Posted
技术标签:
【中文标题】如何填充新创建的猫鼬文档?【英文标题】:How do I populate a newly created mongoose Document? 【发布时间】:2020-05-14 13:01:30 【问题描述】:我有一个案例,我正在检查一个文档是否已经存在,如果它不存在,我正在创建一个新文档。我需要在文档中填充 2 个字段。我的问题是 .create 方法不支持 .populate 方法,因为如果我尝试这样做会出错。此外,.populate 方法也不适用于返回的文档。如何正确填充新创建的文档?这是我的代码:
Favorite.create( user: req.user._id, dishes: req.params.dishId )
.then((favorite) =>
favorite.populate('user');
favorite.populate('dishes');
console.log('Favorite marked', favorite);
res.statusCode = 200;
res.setHeader('Content-Type', 'application/json');
res.json(favorite);
, (err) => next(err))
)
.catch((err) => next(err));
【问题讨论】:
【参考方案1】:您可以在 Model.find 方法之后使用填充方法。
创建的收藏夹会有_id值,所以你可以通过_id找到收藏夹,然后像这样填充用户和菜:
Favorite.findById(favorite._id)
.populate("user")
.populate("dishes")
所有代码:
Favorite.create( user: req.user._id, dishes: req.params.dishId )
.then(
favorite =>
console.log("Favorite marked", favorite);
const result = Favorite.findById(favorite._id)
.populate("user")
.populate("dishes");
res.statusCode = 200;
res.setHeader("Content-Type", "application/json");
res.json(result);
,
err => next(err)
)
.catch(err => next(err));
【讨论】:
【参考方案2】:您在上述解决方案中查询了两次文档,这需要时间并且操作繁重。所以我们可以用这种方式填充同一个文档
let favourite = await Favourite.create( options )
favourite = await favourite.populate('user').populate('dishes').execPopulate()
res.setHeader('Content-Type', 'application/json').status(200).json(favourite)
【讨论】:
以上是关于如何填充新创建的猫鼬文档?的主要内容,如果未能解决你的问题,请参考以下文章