如何填充新创建的猫鼬文档?

Har*_*aye 6 mongoose promise mongoose-populate mongoose-schema

我有一个情况,我正在检查文档是否已存在,如果不存在,我将创建一个新文档。我需要填充文档内的 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));
Run Code Online (Sandbox Code Playgroud)

小智 9

在上述解决方案中,您查询文档两次,这将花费时间并且操作繁重。因此我们可以用这种方式填充同一个文档

let favourite = await Favourite.create({ options })
favourite = await favourite.populate(['user','dishes'])
res.setHeader('Content-Type', 'application/json').status(200).json(favourite)
Run Code Online (Sandbox Code Playgroud)

  • 这应该是公认的答案。除了“execPopulate”已被[删除](https://mongoosejs.com/docs/migration_to_6.html#removed-execpopulate)并且不再需要 (4认同)

Sul*_*Sah 2

您可以在 Model.find 方法之后使用 populate 方法。

创建的收藏夹将具有 _id 值,因此您可以通过 _id 找到收藏夹,然后填充用户和菜肴,如下所示:

Favorite.findById(favorite._id)
          .populate("user")
          .populate("dishes")
Run Code Online (Sandbox Code Playgroud)

所有代码:

  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));
Run Code Online (Sandbox Code Playgroud)