用猫鼬获得流行的标签

时间:2014-03-19 08:41:49

标签: node.js mongodb tags mongoose

我有以下mongoose架构:

mongoose.Schema({
  text: String,
  tags: [String]
});

现在,假设我想获得所有“热门标签”,我会做以下事情:

  1. 创建临时数组
  2. 找到最后n个元素
  3. 循环遍历它们并将所有标记添加到数组
  4. 删除重复项
  5. 返回数组
  6. 这似乎不是最有效的做事方式;是否有更好的方法来实现相同的结果,同时考虑到可以成为一个非常大的集合的问题索引。

1 个答案:

答案 0 :(得分:0)

您的问题可能会更清晰,但似乎您要做的就是积累所有"标签的数量"浏览您馆藏中的所有文件。

因此,您可以使用aggregate

而不是在代码中循环结果
db.collection.aggregate([
    // Unwind the array
    { "$unwind": "$tags" },

    // Group on tags with a count
    { "$group": {
        "_id": "$tags",
        "count": { "$sum": 1 }
    }},

    // Optionally sort the tags by count descending
    { "$sort": { "_id": -1 } },

    // Optionally limit to the top "n" results. Using 10 results here
    { "$limit": 10 }
])

然后,将按照它们出现的次数计算返回前十个最喜欢的标签。

Mongoose有aggregate的模型函数,所以你可以看一下类似的语法。