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

How to remove elements from nested object array?

我正在尝试从嵌套对象数组中删除元素。我的文档如下所示:

{
    "_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);

这个更新似乎有问题,因为删除不起作用。

任何人都可以帮助我吗?

我认为您需要在 sub-field 之前提及字段名称("records.label" 而不是 "label")。

试试这个:

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

如果不行,你可以试试:

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

首先你需要定义一个 schema 为 const

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

你的查询是这样的:

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

我也看到了同样的问题,但这与公认的答案略有不同。

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

因为你已经在 key 中提到了记录,所以你不需要写“records.label”