【问题标题】:How do I delete an objectId from an array if I only have the ID as a string?如果我只有 ID 作为字符串,如何从数组中删除 objectId?
【发布时间】:2021-02-17 14:49:00
【问题描述】:

我在 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)。

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

【问题讨论】:

标签: javascript mongodb mongoose nosql


【解决方案1】:

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

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

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

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

Mongo 游乐场示例here

【讨论】:

    猜你喜欢
    • 2021-09-12
    • 1970-01-01
    • 2020-11-04
    • 1970-01-01
    • 1970-01-01
    • 2015-06-15
    • 1970-01-01
    • 1970-01-01
    • 2011-02-07
    相关资源
    最近更新 更多