MongoDb从数组中删除元素作为子属性

时间:2018-07-16 15:23:33

标签: mongodb

我正在尝试删除作为文档字段的子属性的数组中的条目。 文档的数据如下所示:

{
    _id: 'user1',
    feature: {
        enabled: true,
        history: [
            {
                _id: 'abc123'
                ...
            }
        ]
    },
    ...
}

由于某种原因,我无法使用$ pull删除该元素,并且不确定什么地方出错。

我看过official docs for $pull,这个well-known answer以及this oneanother

我尝试了以下查询

db.getCollection('userData').update({ _id:'user1' }, {
    $pull: {
        'feature.history': { _id: 'abc123' }
    }
})

,它无效。我已经仔细检查过_id,这是正确的匹配。我还尝试过基于同一条目进行过滤,以为我需要定位要删除的数据:

db.getCollection('userData')
    .update({ _id: 'user1', 'feature.history': { _id: 'abc123' }, { ... })

到目前为止没有运气

2 个答案:

答案 0 :(得分:1)

您需要将id强制转换为猫鼬ObjectId

db.getCollection('userData').update(
   { "_id": "user1" },
   { "$pull": { "feature.history": { "_id": mongoose.Types.ObjectId(your_id) } }
})

答案 1 :(得分:0)

db.getCollection('userData').update({ _id:'user1', "feature.history._id" : "abc123" }, {
    $pull: {
        'feature.history.$._id': 'abc123'
    }
})