我试图从嵌套对象数组中删除元素。我的文档如下:
{
"_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);
此更新似乎有问题,因为删除无效。
任何人都能帮助我吗?
答案 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”