通过ObjectId删除嵌入的文档

时间:2019-06-20 03:20:38

标签: mongodb

我一次只能删除(拉出)一个嵌入式文档(此处为“项目”)。

在我的示例中,“ toRemove”是ObjectIds数组(属于cart.items)。

do {
    let apiResponse = try JSONDecoder().decode(Response.self, from: data)
    let server = apiResponse.server // Here is your server struct.
    print(server)
} catch let jsonError {
    print(jsonError)
}

这不起作用。

但是,如果我执行 db.collection('users').updateOne( { _id: new ObjectId(this._id) }, {$pull: {'cart.items': {'productId': toRemove}}} ) ,它将仅删除第一个文档。 我如何一次将它们全部删除?

2 个答案:

答案 0 :(得分:0)

我认为您需要使用$pullAll而不是$pull来从数组中删除所有匹配的实例。

db.collection('users').updateOne(
    { _id: new ObjectId(this._id) }, 
    {$pullAll: {'cart.items': {'productId': toRemove}}}
  )

详细了解$pullAll here

答案 1 :(得分:0)

我需要使用特殊的“ $ in”属性,以删除其“ productId”位于“ toRemove”数组内的所有“ items”:

return db.collection('users').updateOne(
    { _id: new ObjectId(this._id) },
    {$pull: {'cart.items': {'productId': { "$in": toRemove }}}}
)