Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb 使用$project返回数组_Mongodb_Mongodb Query_Aggregation Framework - Fatal编程技术网

Mongodb 使用$project返回数组

Mongodb 使用$project返回数组,mongodb,mongodb-query,aggregation-framework,Mongodb,Mongodb Query,Aggregation Framework,我有一个文档集,看起来像这样: { “活动类型”:1, “allowAccessControl”:正确, “用户ID”:“108028399” } 我想使用聚合框架查询此集合,结果如下所示: { “活动类型”:[“应用程序”], “allowAccessControl”:“true”, “用户ID”:“108028399”, } 你会注意到: 活动类型字段变为和数组 数值已映射到字符串 使用聚合框架可以做到这一点吗 我试着看了看$addToSet和$push,但运气不好 请帮忙 无论是哪

我有一个文档集,看起来像这样:

{
“活动类型”:1,
“allowAccessControl”:正确,
“用户ID”:“108028399”
}
我想使用聚合框架查询此集合,结果如下所示:

{
“活动类型”:[“应用程序”],
“allowAccessControl”:“true”,
“用户ID”:“108028399”,
}
你会注意到:

  • 活动类型
    字段变为和数组
  • 数值已映射到字符串
使用聚合框架可以做到这一点吗

我试着看了看
$addToSet
$push
,但运气不好

请帮忙


无论是哪种情况,您的朋友都是聚合框架中的th操作符。它是一个“三元”运算符,这意味着它计算
true | false
的条件,然后根据该计算返回结果

因此,对于MongoDB 2.6及更高版本的现代版本,您可以使用运算符构建阵列:

db.campaign.aggregate([
{“$project”:{
“活动类型”:{
“$map”:{
“输入”:{“$literal”:[1]},
“as”:“el”,
“在”:{
“$cond”:[
{“$eq”:[“$CAMPATIONTYPE”,1]},
“应用程序”,
假的
]
}
}
},
“AllowAccessControl”:1,
“用户ID”:1
}}
])
或者,通常在大多数版本中,您可以在管道阶段简单地使用运算符:

db.campaign.aggregate([
{“$组”:{
“\u id”:“$\u id”,
“活动类型”:{
“$push”:{
“$cond”:[
{“$eq”:[“$CAMPATIONTYPE”,1]},
“应用程序”,
假的
]
}
},
“allowAccessControl”:{“$first”:“$allowAccessControl”},
“userId”:{“first”:“$userId”}
}}
])

但是,一般的概念是,如果您使用“嵌套”表达式和运算符来“测试”并返回一些与“映射”条件匹配的值,然后使用另一个运算符来生成数组。

太棒了,谢谢!我正在使用Talend,因此不得不使用mongo 2.5。。我想知道“{”$first:“$allowAccessControl”}”的含义是什么?再次-非常感谢@Leo该运算符是聚合API中的“分组运算符”。它返回管道阶段的
\u id
中指定的“分组键”内的“第一个”匹配。顺便说一句,MongoDB 2.5与大多数verisoning系统一样,意味着“开发”版本,因为次要版本是奇数。任何依赖于“开发”版本的生产代码都是不可靠的。