Mongo $pullAll 在对象数组上

Sco*_*tt 4 java arrays mongodb mongodb-query

目前我在 mongo 中有一个这样的数据结构:

{
    "_id": "field00048",
    "colorValues": [
        {
            "stateField": "Open1",
            "color": "purple"
        },
        {
            "stateField": "Open2",
            "color": "blue"
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

我正在使用 mongo shell 创建一个查询,使用 $pullAll 通过在 stateField 字段上进行匹配来删除 colorValues 数组中的两个对象。我试过这些查询,但没有一个真正删除它们匹配的记录。

db.admin.fields.update({_id: "field00048"}, {$pullAll: {stateField: ["Open1", "Open2"]}});
Run Code Online (Sandbox Code Playgroud)

db.admin.fields.update({_id: "field00048"}, {$pullAll: {colorValues: ["Open1", "Open2"]}});
Run Code Online (Sandbox Code Playgroud)

db.admin.fields.update({_id: "field00048"}, {$pullAll: {colorValues: [{stateField:"Open1"}, {stateField:"Open2"}]}});
Run Code Online (Sandbox Code Playgroud)

db.admin.fields.update({_id: "field00048"}, {$pullAll: {colorValues.stateField: ["Open1", "Open2"]}});
Run Code Online (Sandbox Code Playgroud)

db.admin.fields.update({_id: "field00048"}, {$pullAll: {colorValues: stateField:{["Open1", "Open2"]}}});
Run Code Online (Sandbox Code Playgroud)

有什么建议?

谢谢!

Sco*_*tt 9

解决这个问题的查询是:

db.admin.fields.update({_id: "field00048"}, {$pull: {colorValues:{stateField:{$in: ["Open1", "Open2"]}}}}) 
Run Code Online (Sandbox Code Playgroud)