首页 > 解决方案 > 如果我只有 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)。

如果有人可以提供帮助,我将不胜感激。干杯

标签: javascriptmongodbmongoosenosql

解决方案


有一点错误。当您pull使用数组时。

正确的查询应该是这样的:

Client.updateOne(searchQuery,
{
  "$pull": {
    "users": mongoose.Types.ObjectId("5fa0625514b0db02df53084b")
  }
})

此外,查询应该使用mongoose.Types.ObjectId(jwt.id)以避免出现问题。

Mongo游乐场示例在这里


推荐阅读