javascript - MongoDB/Mongoose $pull 一个数组中的对象,其中对象的 _id 匹配
问题描述
我在这里有这个架构
考虑likedTours
这是一个对象数组(旅游)(忽略位置 0)。我想拉出_id
巡回赛符合标准的任何对象。
喜欢旅游时添加新的旅游是可以的,但不像我不知道如何把那个项目拉出来。
这是我在 Node.JS 后端的控制器中的函数
const unlikeTour = async (req, res) => {
try {
TourDB.Tour.findOneAndUpdate(
{ _id: req.params.tourid },
{
$pull: { likedUsers: req.userID },
$inc: { likes: -1 },
}
).exec(async (err, docs) => {
if (!err) {
try {
await UserDB.User.findOneAndUpdate(
{ _id: req.userID },
{ $pull: { 'likedTours._id': docs._id } } //Here I need help
).exec()
return res.status(200).send({ successMessage: 'Tour successfully unliked' })
} catch (err) {
return res.status(500).send({ errorMessage: 'User not found' })
}
} else {
return res.status(500).send({ errorMessage: 'Tour not found' })
}
})
} catch (err) {
return res.status(500).send({ errorMessage: err })
}
}
此方法查找游览并通过提取用户 ID 并将喜欢计数减少 -1 来更新它。然后我尝试在 UserDB 中找到巡回演出likedTours
并尝试拉动,但它不能那样工作。
提前致谢
解决方案
你可以更新为
await UserDB.User.findOneAndUpdate(
{ _id: req.userID },
{ $pull: { likedTours: { _id: docs._id } } } //Here I need help
).exec();
参考:https ://docs.mongodb.com/manual/reference/operator/update/pull/
推荐阅读
- node.js - Unable to create a signed url using AWS and with IRSA enabled on kubernetes pods
- css - CSS input stripes effect : when the input empty
- c# - C#: Difference between implicit bool cast and operator true/false
- javascript - How to logout (Session timeout and logout) the application using JavaScript
- javascript - Node Package manager watch command not working
- python - Python Selenium 标题包含“和”“或”多个条件
- python - Retrieve data for a particular date and 7days ago value using Pandas
- python - 从 Firebase Auth 获取公钥/私钥
- java - How to Install OpenCV@2 with Java jars for Java based development
- talend - 如何使用来自 tHashInput 的迭代链接