[英]mongodb java driver pullByFilter
我有文档架构,例如
{
"_id" : 18,
"name" : "Verdell Sowinski",
"scores" : [
{
"type" : "exam",
"score" : 62.12870233109035
},
{
"type" : "quiz",
"score" : 84.74586220889356
},
{
"type" : "homework",
"score" : 81.58947824932574
},
{
"type" : "homework",
"score" : 69.09840625499065
}
]
}
我有一个使用pull的解决方案,可以一次删除一个元素,但看到我想得到一个通用的解决方案,该解决方案可以解决数组中存在一个和多个元素之间的不规则架构,并且我想删除所有基于条件的元素。
我正在使用mongodb驱动程序3.2.2,看到了这个pullByFilter听起来不错
创建一个更新,从数组中删除所有与给定过滤器匹配的元素的更新。
我试过了
Bson filter = and(eq("type", "homework"), lt("score", highest));
Bson u = Updates.pullByFilter(filter);
UpdateResult ur = collection.updateOne(studentDoc, u);
毫不奇怪,这没有任何作用,因为我没有指定数组scores
我得到一个错误
位置运算符未从查询中找到所需的匹配项。 未扩展的更新:scores。$。type
当我将过滤器更改为
Bson filter = and(eq("scores.$.type", "homework"), lt("scores.$.score", highest));
有没有一步解决这个问题的方法?
我找不到这种特定方法的信息。 这个问题可能与如何在mongodb中更新多个数组元素有关
经过更多的“思考”(和一些反复试验),我找到了包装基本过滤器的正确过滤器方法。 我想我过多地关注数组运算符。
如果发生燃烧,我不会在这里发布。
提示:处理Filters辅助方法时,请考虑“ matches ...”(与正则表达式模式匹配一样);)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.