從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