从3.4开始,使用MongoDB,您可以使用$in
得到一个比较数组:
db.zips.aggregate([
{ "$group": {
"_id": null,
"lower_ny": {
"$sum": {
"$cond": [{ "$in": [ "$zip", lower_ny_zipcodes ] },1,0]
}
},
"east_ny": {
"$sum": {
"$cond": [{ "$in": [ "$zip", east_ny_zipcodes ] },1,0]
}
},
"upper_ny": {
"$sum": {
"$cond": [{ "$in": [ "$zip", upper_ny_zipcodes ] },1,0]
}
}
}}
])
如果你没有那么再有就是因为MongoDB的2.6 $setIsSubset
。语法和意图略有不同。但是,你的列表是“独一无二”的,所以它不是一个问题:
db.zips.aggregate([
{ "$group": {
"_id": null,
"lower_ny": {
"$sum": {
"$cond": [{ "$setIsSubset": [ ["$zip"], lower_ny_zipcodes ] },1,0]
}
},
"east_ny": {
"$sum": {
"$cond": [{ "$setIsSubset": [ ["$zip"], east_ny_zipcodes ] },1,0]
}
},
"upper_ny": {
"$sum": {
"$cond": [{ "$setIsSubset": [ ["$zip"], upper_ny_zipcodes ] },1,0]
}
}
}}
])
它在本质上只是为了你的外部定义的数组内容,其中获取发送作为操作BSON内容扩展逻辑比较。
当然,您的数组中的值也必须是“字符串”才能匹配。但是,如果您还没有完成,那很容易:
east_ny_zipcodes = [11209, 11210, 11211, ...].map(n => n.toString());
您可以使用'$ group'和'$ cond'并比较每个类别在它自己的cond中的数组。像'db.collection_name.aggregate({ “$组”:{ “_id”:空, “east_ny”:{ “$总和”:{ “$ COND”:在[ { “$ “:[ “$拉链”, “east_ny_zipcodes” ] }, 1,] } } } })'。你可以用'$或'添加'$ match'阶段来限制在管道中处理的邮政编码。 – Veeram