2

在使用组时,我需要很少的值通过管道(没有更改)传递到后续管道聚合器

例如,如果我的输入是

{“_id”:1,“标签”:[“a”,“b”,“b”,“c”],“文本”:“a”},{“_id”:2,“标签”:[ “a”,“c”],“文本”:“b”}

我喜欢输出

{_id:1,标签:[a,b,c],文本:a},{_id:2,标签:[a,c],文本:b}

我做了一个放松和分组并做 $addToSet 来删除重复。我的问题是我该怎么做

text按原样出现在输出中。文本键和值只需要通过这个管道,但是我被迫使用累加器

到目前为止我尝试了这段代码

使用测试

var unwind = { $unwind : "$tags"};

var group = { $group : { _id : "$_id" , tags : { $addToSet : "$tags" } , text : { $first : "$text" }}};

db.test.aggregate(展开,组)

它工作正常,但这不是 $first 的意图,建议与 sort 一起使用。这样做的正确方法是什么?

4

2 回答 2

1

使用它没有任何问题$first。作为替代方案,您可以添加text到您_id的.$project_id

你必须对 SQL group bys 做同样的有点尴尬的事情。

于 2013-09-20T16:20:51.027 回答
0

除字段外的所有字段都_id必须使用带有 的累加器,如文档页面$group中所指定。问题是不清楚通过管道“传递”一个值意味着什么,因为 MongoDB 无法知道该字段的值对于您分组在一起的所有文档来说都是相同的。您必须使用累加器为该字段选择所需的值。$group$group

于 2013-09-20T16:22:27.580 回答