我正在使用聚合管道构建器的云mongoDB地图集在线版本。 我的文档如下:
_id: 'a314314133351sd4d'
type: 'Test_993das'
我想要实现的是,我得到一个名称为customField的自定义字段,该字段将计算所有子字符串为Type的文档:
customField: 6
但是,当我使用阶段$ addFields时,字符串无法正常工作。甚至是文档中的内容。 似乎$ regexMatch在addFields阶段无法识别,即使文档建议这样做也可以。
{ $addFields: { customField: { $regexMatch: { input: "$type", regex: "Test_*" } }
答案 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上可用,而且您的正则表达式无效(应为$regexMatch
或Test_
)。
但是,您使用的语法只会产生Test_.*
(或customField: true
),不会产生计数。计数是聚合函数,因此需要对一组文档进行操作。除非您使用诸如false
,$group
或$bucket
之类的分组阶段,否则聚合管道将在每个文档上运行。
在您的示例中,这意味着$count
将评估正则表达式并在每个文档上添加字段。所以可能您想要类似的东西:
$addField
此外,如果您的正则表达式仅与字符串的开头匹配,则锚定该正则表达式将获得更好的性能,例如:[
{ $match: { 'type': { $regex: /Test_.*/ } } },
{ $count: 'customField' }
]