mongodb java 驱动程序 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 方法来包装我的基本过滤器。我想我太关注数组运算符了。

我不会在这里张贴它以防着火。

线索:在处理过滤器辅助方法时考虑“匹配...”(如在正则表达式模式匹配中);)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章