我有文档架构,例如
{
"_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] 删除。
我来说两句