我有以下mongoose架构:
mongoose.Schema({
text: String,
tags: [String]
});
现在,假设我想获得所有“热门标签”,我会做以下事情:
这似乎不是最有效的做事方式;是否有更好的方法来实现相同的结果,同时考虑到可以成为一个非常大的集合的问题索引。
答案 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的模型函数,所以你可以看一下类似的语法。