mongoDB聚合管道中的$ addFields

时间:2020-01-02 15:45:23

标签: mongodb aggregation

我正在使用聚合管道构建器的云mongoDB地图集在线版本。 我的文档如下:

_id: 'a314314133351sd4d'
type: 'Test_993das'

我想要实现的是,我得到一个名称为customField的自定义字段,该字段将计算所有子字符串为Type的文档:

customField: 6

但是,当我使用阶段$ addFields时,字符串无法正常工作。甚至是文档中的内容。 似乎$ regexMatch在addFields阶段无法识别,即使文档建议这样做也可以。

{ $addFields: { customField: { $regexMatch: { input: "$type", regex: "Test_*" } }

1 个答案:

答案 0 :(得分:0)

如tom slabbaert所述,glm_mod <- glm(formula = resid_model1 ~ stateofeconomy + self_placement_extreme + interaction_resid_1 + age + education + income + electoral_system + election_loser + polity_IV + module1 + module4, data = subsample2 ) summary(glm_mod) Deviance Residuals: Min 1Q Median 3Q Max -0.12129 -0.06407 0.03418 0.06221 0.09203 Coefficients: (4 not defined because of singularities) Estimate Std. Error t value Pr(>|t|) (Intercept) -0.521852 0.012550 -41.581 < 2e-16 *** stateofeconomy -0.079185 0.002531 -31.284 < 2e-16 *** self_placement_extreme 0.290719 0.006678 43.535 < 2e-16 *** interaction_resid_1 0.207318 0.038027 5.452 6.05e-08 *** age 0.006897 0.000125 55.171 < 2e-16 *** education 0.047107 0.001637 28.769 < 2e-16 *** income 0.056425 0.001449 38.945 < 2e-16 *** electoral_system NA NA NA NA election_loser -0.141062 0.007631 -18.485 < 2e-16 *** polity_IV NA NA NA NA module1 NA NA NA NA module4 NA NA NA NA --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Dispersion parameter for gaussian family taken to be 0.004036176) Null deviance: 40.4291 on 1207 degrees of freedom Residual deviance: 4.8434 on 1200 degrees of freedom AIC: -3220.9 Number of Fisher Scoring iterations: 2 仅在MongoDB 4.2.x上可用,而且您的正则表达式无效(应为$regexMatchTest_)。

但是,您使用的语法只会产生Test_.*(或customField: true),不会产生计数。计数是聚合函数,因此需要对一组文档进行操作。除非您使用诸如false$group$bucket之类的分组阶段,否则聚合管道将在每个文档上运行。

在您的示例中,这意味着$count将评估正则表达式并在每个文档上添加字段。所以可能您想要类似的东西:

$addField

此外,如果您的正则表达式仅与字符串的开头匹配,则锚定该正则表达式将获得更好的性能,例如:[ { $match: { 'type': { $regex: /Test_.*/ } } }, { $count: 'customField' } ]