我有一个包含以下文档的集合:
{
"campaignType" : 1,
"allowAccessControl" : true,
"userId" : "108028399"
}
我想使用聚合框架查询此集合,结果如下:
{
"campaignType" : ["APPLICATION"],
"allowAccessControl" : "true",
"userId" : "108028399",
}
你会注意到:
campaignType
字段变为和数组可以使用聚合框架来完成吗?
我尝试查看$addToSet
和$push
,但没有运气。
请帮忙。
由于
答案 0 :(得分:1)
在这两种情况下,它都是聚合框架中的$cond
运算符,是您的朋友。它是一个“三元”运算符,这意味着它评估true|false
的条件,然后根据该评估返回结果。
因此,对于MongoDB 2.6及更高版本的现代版本,您可以$project
使用$map
运算符来构造数组:
db.campaign.aggregate([
{ "$project": {
"campaignType": {
"$map": {
"input": { "$literal": [1] },
"as": "el",
"in": {
"$cond": [
{ "$eq": [ "$campaignType", 1 ] },
"APPLICATION",
false
]
}
}
},
"allowAcessControl" : 1,
"userId": 1
}}
])
或者通常在大多数版本中,您只需在$push
管道阶段使用$group
运算符:
db.campaign.aggregate([
{ "$group": {
"_id": "$_id",
"campaignType": {
"$push": {
"$cond": [
{ "$eq": [ "$campaignType", 1 ] },
"APPLICATION",
false
]
}
},
"allowAccessControl": { "$first": "$allowAccessControl" },
"userId": { "first": "$userId" }
}}
])
但是一般的概念,如果您使用“嵌套”表达式与$cond
运算符,以“测试”并返回一些符合您的“映射”条件的值,并与另一个允许您的运算符执行此操作产生一个数组。