【问题标题】: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));

【问题讨论】:

    标签: mongoose promise mongoose-schema mongoose-populate


    【解决方案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)
      

      【讨论】:

        猜你喜欢
        • 2021-02-11
        • 2014-09-06
        • 2021-04-26
        • 2013-10-05
        • 2021-10-07
        • 2016-08-17
        • 2017-05-07
        • 2016-05-16
        • 2015-07-28
        相关资源
        最近更新 更多