如何从嵌套对象数组中删除元素?
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”
我正在尝试从嵌套对象数组中删除元素。我的文档如下所示:
{
"_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”