javascript - 如果我只有 ID 作为字符串,如何从数组中删除 objectId?
问题描述
我在 Client.users 中有一组 ObjectID。我正在尝试删除与存储在 req.body 中的 ID 匹配的 ObjectId。存储的 ID 是“5fa0625514b0db02df53084b”字符串 - 不是 ObjectID 格式。
const { id } = req.body; // this is 5fa0625514b0db02df53084b (second in the array)
Client: {
users: [
ObjectId("5fa027c614b0db02df530848"),
ObjectId("5fa0625514b0db02df53084b")
]
}
我尝试使用 Mongoose 将 req.body 中的字符串转换为对象 ID,但它仍然不起作用。
let searchQuery = {"_id": jwt.id};
Client.findOneAndUpdate(searchQuery, {
$pull: {
"users": [mongoose.Types.ObjectId(id)]
}
})
如果我只将它作为字符串开头,是否可以从数组中删除一个 ObjectID?我知道必须有一种方法可以以某种方式对其进行转换,但是文档告诉我使用上面的尝试,但它似乎不起作用(不会从数组中删除 ObjectID)。
如果有人可以提供帮助,我将不胜感激。干杯
解决方案
有一点错误。当您pull
使用数组时。
正确的查询应该是这样的:
Client.updateOne(searchQuery,
{
"$pull": {
"users": mongoose.Types.ObjectId("5fa0625514b0db02df53084b")
}
})
此外,查询应该使用mongoose.Types.ObjectId(jwt.id)
以避免出现问题。
Mongo游乐场示例在这里
推荐阅读
- python - 如何在python中使用带有2个数据框的函数
- html - 验证码解决服务如何将我的验证码加载给他们的工作人员
- react-redux - react-redux 钩子中的顺序调度操作
- flutter - Flutter:如何在 Wrap 小部件中将容器大小设置为 wrap_content
- swiftui - SwiftUI 更改显示在操作表中的状态
- flutter - RenderView 中的 Window 参数所需的值是多少
- reactjs - Reactjs:FirebaseError:消息:我们无法注册默认服务工作者
- functional-programming - 有没有更好的方法在 Idris 中编写嵌套案例?
- node.js - MongoDB:通过其 ObjectId 查找数据返回空响应
- node.js - 在溢出的 agrs discord js 中需要帮助