我正在努力实现它:
”计算在美国居住在邮政编码中的人数, 该城市以以下特征之一开头:B,D,O,G,N 或M。”
因此,编写和使用如下的聚合管道:
db.zips.aggregate( { $project :{digits : {$substr : [ "$city", 0, 1] }, pop : 1, city : "$city", zip : "$_id", state : 1}},{ $match :{ digits : /\M/ } },{ $group :{_id : null, pop : { $sum : "$pop"}}})
仅用 M 位就可以成功获得结果,但是我想添加更多:B,D,O,G,N
{ "_id" : null, "pop" : 19499064 }
尝试添加其他数字,例如:
db.zips.aggregate( { $project :{digits : {$substr : [ "$city", 0, 1] }, pop : 1, city : "$city", zip : "$_id", state : 1}},{ $match :{ digits : /\M/, /\B/, /\D/, /\O/,/\G/,/\N/ } },{ $group :{_id : null, pop : { $sum : "$pop"}}})
并得到错误:
2018-07-03T20:47:07.273+0300 E QUERY [thread1] SyntaxError: invalid property id @(shell):1:151
PS :我知道:
{ $match: { city: { $in: [ /^b.*/i, /^d.*/i, /^o.*/i, /^g.*/i, /^n.*/i, /^m.*/i ] } } }
但是,如何在上述格式的第一个变体中正确显示数字?像/\M/
一样有几个数字。