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 - Fatal编程技术网

MongoDB中的聚合,不包括数组项

MongoDB中的聚合,不包括数组项,mongodb,Mongodb,我需要按分类数组对这些文档进行分组,但我必须从组中排除第一个文档中的“term3”项。(我的情况在真实的应用程序中更复杂,但这个例子很适合。) 由于“term3”项,此命令生成两个节点: 可以展开,匹配,然后对文档重新分组,或者有一种简单的方法?运行此聚合: db.terms.aggregate([ {$unwind:"$Taxonomy"}, {$match:{"Taxonomy.Term":{$ne:"term3"}}}, {$group:{_id:"$_id",Ta

我需要按分类数组对这些文档进行分组,但我必须从组中排除第一个文档中的“term3”项。(我的情况在真实的应用程序中更复杂,但这个例子很适合。)

由于“term3”项,此命令生成两个节点:


可以
展开
匹配
,然后对文档重新分组,或者有一种简单的方法?

运行此聚合:

db.terms.aggregate([
    {$unwind:"$Taxonomy"},
    {$match:{"Taxonomy.Term":{$ne:"term3"}}},
    {$group:{_id:"$_id",Taxonomy:{$push:"$Taxonomy"}}}
])
将产生以下结果:

{ "_id" : "2", "Taxonomy" : [ { "Key" : "1", "Term" : "term1" }, { "Key" : "2", "Term" : "term2" } ] }
{ "_id" : "3", "Taxonomy" : [ { "Key" : "1", "Term" : "term1" }, { "Key" : "2", "Term" : "term2" } ] }
{ "_id" : "1", "Taxonomy" : [ { "Key" : "1", "Term" : "term1" }, { "Key" : "2", "Term" : "term2" } ] }

如果需要进一步分组/处理,可以添加更多阶段。如果需要根据关键字而不是术语排除,则可以调整
$match
阶段。如果要排除除term1和term2以外的所有内容,请将运行此聚合的
$ne
更改为
$in:[]

db.terms.aggregate([
    {$unwind:"$Taxonomy"},
    {$match:{"Taxonomy.Term":{$ne:"term3"}}},
    {$group:{_id:"$_id",Taxonomy:{$push:"$Taxonomy"}}}
])
将产生以下结果:

{ "_id" : "2", "Taxonomy" : [ { "Key" : "1", "Term" : "term1" }, { "Key" : "2", "Term" : "term2" } ] }
{ "_id" : "3", "Taxonomy" : [ { "Key" : "1", "Term" : "term1" }, { "Key" : "2", "Term" : "term2" } ] }
{ "_id" : "1", "Taxonomy" : [ { "Key" : "1", "Term" : "term1" }, { "Key" : "2", "Term" : "term2" } ] }

如果需要进一步分组/处理,可以添加更多阶段。如果需要根据关键字而不是术语排除,则可以调整
$match
阶段。如果您想排除除term1和term2之外的所有内容,您可以将
$ne
更改为
$in:[]

我不确定这是否有效,但您是否考虑过$unwind->$limit->$group pipeline?我无法使用
limit
,我几乎需要
匹配
。。。但是我被语法难住了!您的意思是,您希望得到与上面完全相同的结果,但只希望在数组中保留term1、term2元素吗?一般来说,除了您已经尝试过的,最好向我们展示您想要的结果。我不确定这是否有效,但您是否考虑过$unwind->$limit->$group pipeline?我无法使用
limit
,我几乎需要
匹配
。。。但是我被语法难住了!您的意思是,您希望得到与上面完全相同的结果,但只希望在数组中保留term1、term2元素吗?总的来说,除了你已经尝试过的以外,最好向我们展示你想要的结果。