如何使用 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 数组中推送数据的主要内容,如果未能解决你的问题,请参考以下文章
node.js + express.js:使用 mongodb/mongoose 处理会话
如何使用 Mongoose 在 MongoDB 中插入 JSON 数组
如何在 typescript 中使用 mongoose 在 mongodb 中插入数据?