繁体   English   中英

mongodb java驱动程序pullByFilter

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM