【问题标题】:How to push data in MongoDB's array with mongoose如何使用 mongoose 在 MongoDB 数组中推送数据
【发布时间】:2020-06-04 16:59:21
【问题描述】:

我在 MongoDB 中有一个空数组

我想把 ID 推进去。

router.put(
  "/like/:id",
  (req, res) => {
    User.findOne({ _id: req.user._id }).then(data => {
      if (data) {
        Post.update(
          { _id: ObjectId(req.params.id) },
          { $push: { likes: req.user._id } }
        );
      }
    });
  }
);

此代码不适用于我如何实现这一目标。

【问题讨论】:

  • findOne() 在 Mongoose 中返回 Query,而不是 Promise。您需要链接exec 方法以获得承诺,即User.findOne({ _id: req.user._id }).exec().then(...)User.findById(req.user._id).exec().then(...)

标签: arrays node.js mongodb mongoose mongodb-query


【解决方案1】:
router.put (
  "/addlike/:id",
  passport.authenticate("jwt", {
    session: false
  }),
  (req, res) => {

   // use try-catch 
   try { 
    User.findOne({ _id: req.user._id }).then(data => {
      if (data) {
        Post.findOneAndUpdate(
          { _id: ObjectId(req.params.id) },
          { $push: { likes: req.user._id },
          { "new": true, "upsert": true} }
        );
      }
    });
   } catch(err){
    // handle error
    console.log('Error => ', err);
   }
  }
);

我已经在本地系统中对此进行了测试...工作正常

【讨论】:

  • 当我使用这段代码时,我的 VS 代码给了我一些语法错误。
  • @RohitNishad 不要复制粘贴整个代码。遵循逻辑。使用 findOneAndUpdate Post.findOneAndUpdate( { _id: ObjectId(req.params.id) }, { $push: { likes: req.user._id }, { "new": true, "upsert": true} } );
  • @RohitNishad 你用我的逻辑解决了这个问题。我说的对吗???
  • 不,我只是改变了一些东西。比如使用 $addtoset 代替 $push 并删除 User.findOne 等。
猜你喜欢
  • 1970-01-01
  • 2020-11-16
  • 1970-01-01
  • 2020-06-19
  • 2018-09-14
  • 2021-02-17
  • 2019-08-23
  • 2017-09-19
  • 1970-01-01
相关资源
最近更新 更多