猫鼬按差异收集中对象ID的计数排序

时间:2018-08-21 15:55:12

标签: sorting mongoose collections count objectid

我有一些文章集,例如

var articleSchema = new Schema(
{
    link: { type: String, required: true, unique: true  },
    title: { type: String },
    description: {type: String },
    source: { type: Schema.ObjectId, ref: 'sources' },
    … 
};

Source通过objectId链接到Source模式。

var sourceSchema = new Schema(
{
    name: { type: String, required: true, lowercase: true },
    short_handle: { type: String, required: true, lowercase: true, unique: true },
    website: { type: String, required: true, lowercase: true, unique: true },
    …
}

我想做的是:查询来源并按链接到该来源的文章数量对它们进行排序。有可能吗?

1 个答案:

答案 0 :(得分:3)

在为每篇文章添加源引用时,您将需要在Article模型上进行查询。需要进行聚合以按分组和排序的顺序获得所需的结果。

await Article
    .aggregate([

        { "$group": { 
            "_id": '$source', 
            "articleCount": { "$sum": 1 }
        }},

        { "$sort": { "articleCount": -1 } }
]);

此查询返回源列表及其相关文章按排序顺序计数。就我而言,这是输出。

[ { _id: 5b7c7cf407d686e60a07e4e1, articleCount: 4 },
  { _id: 5b7c7cc707d686e60a07e4df, articleCount: 2 },
  { _id: 5b7c7ce407d686e60a07e4e0, articleCount: 1 } ]