如何从嵌套对象数组中删除元素?

时间:2018-02-20 11:08:52

标签: spring mongodb mongodb-query spring-data-mongodb

我试图从嵌套对象数组中删除元素。我的文档如下:

{
    "_id" : ObjectId("5a79b8a6b2ba9a49359fa3c3"),
    "_class" : "com.PersonEntity",
    "records" : [ 
        {
            "number" : "4905537",
            "label" : "ASH"
        }, 
        {
            "number" : "KM537",
            "label" : "JAP"
        }, 
        {
            "number" : "49537",
            "label" : "JAP"
        }
    ]
}

我想删除记录中标有" JAP"的所有文件的所有记录。

这就是我尝试这样做的方式:

Update update = new Update().pull("records", new BasicDBObject("label", "JAP"));
mongoOperations.updateMulti(new Query(), update, PersonEntity.class);

此更新似乎有问题,因为删除无效。

任何人都能帮助我吗?

3 个答案:

答案 0 :(得分:2)

我相信你需要在子字段之前提及字段的名称(" records.label"而不是"标签")。

试试这个:

Update update = new Update().pull("records", new 
                     BasicDBObject("records.label","JAP"));

如果不这样做,您可以尝试:

Update update = new Update().pull("records", 
                     Collections.singletonMap("label", "JAP"));

答案 1 :(得分:0)

首先,您需要将架构定义为const

const Chat = require('./modules/chat/chatModel')

,您的查询是这样的:

    Chat.update({
            _id: ObjectId("5a79b8a6b2ba9a49359fa3c3"),
        }, {
            $pull: {
                records: {
                    label: "ASH"
                },
            },
        });

答案 2 :(得分:0)

我也目睹了同样的问题,但这与接受的答案略有不同。

Update update = new Update().pull("records", new 
                     BasicDBObject("label","JAP"));

正如你已经在 key 中提到的记录,所以你不需要写“records.label”