MongoDB中的聚合,不包括数组项
我需要按分类数组对这些文档进行分组,但我必须从组中排除第一个文档中的“term3”项。(我的情况在真实的应用程序中更复杂,但这个例子很适合。) 由于“term3”项,此命令生成两个节点:MongoDB中的聚合,不包括数组项,mongodb,Mongodb,我需要按分类数组对这些文档进行分组,但我必须从组中排除第一个文档中的“term3”项。(我的情况在真实的应用程序中更复杂,但这个例子很适合。) 由于“term3”项,此命令生成两个节点: 可以展开,匹配,然后对文档重新分组,或者有一种简单的方法?运行此聚合: db.terms.aggregate([ {$unwind:"$Taxonomy"}, {$match:{"Taxonomy.Term":{$ne:"term3"}}}, {$group:{_id:"$_id",Ta
可以
展开
,匹配
,然后对文档重新分组,或者有一种简单的方法?运行此聚合:
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元素吗?总的来说,除了你已经尝试过的以外,最好向我们展示你想要的结果。