如何使用 mongoose 在 MongoDB 数组中推送数据

Posted

技术标签:

【中文标题】如何使用 mongoose 在 MongoDB 数组中推送数据【英文标题】:How to push data in MongoDB's array with mongoose 【发布时间】: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(...) 【参考方案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 等。

以上是关于如何使用 mongoose 在 MongoDB 数组中推送数据的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 mongoose 从 mongodb 中选择值

node.js + express.js:使用 mongodb/mongoose 处理会话

如何使用 Mongoose 在 MongoDB 中插入 JSON 数组

如何在 typescript 中使用 mongoose 在 mongodb 中插入数据?

如何使用 Mongoose 在 mongoDB 中填充 3 个集合

如何在不创建 Mongoose 模型的情况下将 GraphQL 与 Mongoose 和 MongoDB 一起使用