如何从MongoDB中的数组中删除元素? $ pull似乎无法运作

时间:2017-07-31 12:43:04

标签: mongodb

我需要从MongoDB中的不同对象中删除多个元素,但我的查询返回以下错误:"无法将pull应用于非数组值"。这是我的问题:

db.getCollection('mediaelements').update(
    { customer: ObjectId("...") },
    { $pull: { competitions: { $in: [ '24', '362', '361' ] } } },
    { multi: true }
)

元素结构的一个例子:

{
    "_id" : ObjectId("..."),
    "opts" : {
        "data" : {
            "playerSide" : "both",
            "playerIconPlayer" : "p92985"
        },
        "type" : "playerIcon"
    },
    "language" : null,
    "network" : "any",
    "customer" : ObjectId("..."),
    "file" : "image.png",
    "type" : "image",
    "__v" : 0,
    "ranking" : 1,
    "competitions" : [ 
        "24",
        "58", 
        "354",
        "361"
    ],
    "medias" : []
}

在这里,我想删除比赛" 24"和" 361"。

感谢您的帮助

Ps:没有{multi:true}似乎没有效果: "在1ms内更新了1条现有记录" 使用{multi:true}: "不能将$ pull应用于非数组值" 随着$ pullAll: " $ pullAll需要一个数组参数,但是给了一个对象"

也许有一些比赛'哪些不是阵列?我怎么能只将它应用于数组呢?或欢迎任何其他解决方案。

1 个答案:

答案 0 :(得分:0)

  1. 使用updateMany更新多个文档
  2. 使用$pullAll删除特定项目
  3. 使用dot notation过滤掉无效(“非数组”)数据。
  4. 全部放在一起:

    db.getCollection('mediaelements').updateMany(
      { customer: ObjectId("...") },
      { "competitions.0": { "$exists": true } }, 
      { $pullAll: { "competitions": [ '24', '362', '361' ] } }
    )