【发布时间】:2014-06-17 20:51:57
【问题描述】:
使用示例 zipcodes 集合,我有一个这样的查询:
db.zipcodes.aggregate([
{ "$match": {"state": {"$in": ["PA","NY"]}}},
{ "$group": { "_id": { "city": "$city" }, "ZipsPerCity": {"$addToSet": "$_id"}}},
{ "$match": { "ZipsPerCity" : { "$size": 2 }}},
]).pretty()
这只是一个查找具有 2 个邮政编码的城市(纽约州和宾夕法尼亚州)的示例:
{
"_id" : {
"city" : "BETHLEHEM"
},
"ZipsPerCity" : [
"18018",
"18015"
]
}
{
"_id" : {
"city" : "BEAVER SPRINGS"
},
"ZipsPerCity" : [
"17843",
"17812"
]
}
现在假设我想使用“$setDifference”集合运算符将“BEAVER SPRINGS”邮政编码与“BETHLEHEM”邮政编码进行比较?我尝试在 $project 运算符中使用“$setDifference”运算符,如下所示:
db.zipcodes.aggregate([
{ "$match": { "state": {"$in": ["PA","NY"]}}},
{ "$group": { "_id: {city : "$city"},"ZipsPerCity": {$addToSet: "$_id"}}},
{ "$match": { "ZipsPerCity" : { $size: 2 }}},
{ "$project": {
"int": { "$setDifference":[
"$_id.city.BETHLEHEM.ZipsPerCity",
"$_id.city.BEAVER SPRINGS.ZipsPerCity"
]}
}}
]).pretty()
这甚至看起来都不对,更不用说产生结果了。虽然没有错误。
您将如何使用 $setDifference(或任何集合运算符)引用像这样使用 $addToSet 构建的几个数组?
【问题讨论】:
标签: mongodb aggregation-framework