Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.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中投影包含特定字段的所有对象_Mongodb_Aggregation Framework - Fatal编程技术网

在数组mongodb中投影包含特定字段的所有对象

在数组mongodb中投影包含特定字段的所有对象,mongodb,aggregation-framework,Mongodb,Aggregation Framework,对我来说,mongodb还有一个问题: 我正试图在mongodb中为所有用户对数组中的某些项进行$group:下面是一个文档 { 名称:“富吧”, 小组:[{ 组名:“D组”, 分数:[2,1] }, { 组名:“D组”, 分数:[3,0] }, { 组名:“C组”, 分数:[2,2] }] } 所有用户都有相同的结构,只是分数不同。 我想检查所有用户,并返回他们所有的“Group D”对象,连同他们的名称一起分组-我的解决方案的结果需要如下所示: 结果: [{名称:“富吧”, 小组:[{ 组

对我来说,mongodb还有一个问题:

我正试图在mongodb中为所有用户对数组中的某些项进行$group:下面是一个文档

{
名称:“富吧”,
小组:[{
组名:“D组”,
分数:[2,1]
},
{
组名:“D组”,
分数:[3,0]
},
{
组名:“C组”,
分数:[2,2]
}]
}
所有用户都有相同的结构,只是分数不同。 我想检查所有用户,并返回他们所有的“Group D”对象,连同他们的名称一起分组-我的解决方案的结果需要如下所示:

结果:
[{名称:“富吧”,
小组:[{
组名:“D组”,
分数:[2,1]
},
{
组名:“D组”,
分数:[3,0]
}]
},{//*更多用户*/}]
所以我知道我需要$group,大概$all,$aggregate,$wind

但我看到的所有示例都是针对find()的查询部分,而不是投影部分。我需要从所有用户那里获取此信息,但我不想处理所有用户并开始扫描mongodb之外的信息……换句话说,复杂的投影,可能吗?

相当简单:

db.collection.aggregate([
//展开阵列
{“$unwind”:“$groups”},
//匹配您想要的元素
{“$match”:{“groups.groupName”:“groupd”},
//分组返回原始形式
{“$组”:{
“\u id”:“$\u id”,
“名称”:{“$first”:“$name”},
“组”:{“$push”:“$groups”}
}}
])

这应该就可以了。

谢谢-你能解释一下$first在这个查询中的作用吗-因为在源代码中它说“只有在$group执行$sort操作时才使用$first。否则,这个操作的结果是不可预测的。”@orepor通常情况下就是这样,但是,由于这是按
\u id
进行分组,并且不会遍历文档,因此没有什么可排序的。因此,这只是获取文档中现有的字段,并以与原始文档相同的结构在结果中显示它。每个文档只有一个字段,因此
$first
是合适的。