6
我很難解決這個mongodb(mongoose)問題。
有架構Guess
(_id
,title
,tags
)與tags
是tags_id的陣列(從Tag
模式被引用)。
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var schema = mongoose.Schema({
title: {
type: Schema.Types.Mixed,
required: true
},
tags: [{
type: Schema.Types.ObjectId,
ref: 'Tag',
required: false,
default: []
}]
});
schema.index({ '$**': 'text' });
module.exports = mongoose.model('Guess', schema);
文件的例子:
{
"_id" : ObjectId("578857529507cafd5fe1f9b3"),
"title" : {
"en" : "Will Amazon start its first drone deliveries this year?"
},
"tags" : [
ObjectId("578857529507cafd5fe1f9b7"),
ObjectId("578857529507cafd5fe1f9b6")
]
}
{
"_id" : ObjectId("578857a59507cafd5fe1f9bb"),
"title" : {
"en" : "Will Singapore 3D print homes during 2016?"
},
"tags" : [
ObjectId("578857a59507cafd5fe1f9bf"),
ObjectId("578857529507cafd5fe1f9b6")
]
}
......
.....
我需要得到最熱門的標籤(標籤)的列表。上面我向您展示架構和我的解決方案貓鼬查詢。
Guess.aggregate([
{
"$project": {
"_id": 1,
"tags": 1
}
},
{
"$unwind": "$tags"
}
// ,
// {
// "$group": {
// "tags": '$tags.tags',
// "count": {"$sum": 1}
// }
// },
// {"$sort": {"count": -1}},
// {"$limit": 5}
], function (error, result) {
//
});
如果我評論此選項
{
"$group": {
"tags": '$tags.tags',
"count": {"$sum": 1}
}
},
{"$sort": {"count": -1}},
{"$limit": 5}
然後我查詢的結果是
[ { _id: 578857529507cafd5fe1f9b3,
tags: 578857529507cafd5fe1f9b7 },
{ _id: 578857529507cafd5fe1f9b3,
tags: 578857529507cafd5fe1f9b6 },
{ _id: 578857a59507cafd5fe1f9bb,
tags: 578857a59507cafd5fe1f9bf },
{ _id: 578857a59507cafd5fe1f9bb,
tags: 578857a59507cafd5fe1f9be },
{ _id: 578857d637cc983f60774fcb,
tags: 578857d637cc983f60774fcf },
{ _id: 578857d637cc983f60774fcb,
tags: 578857d637cc983f60774fce },
{ _id: 578f2cbe875ec80f11e49a66,
tags: 578f2cbe875ec80f11e49a6a },
{ _id: 578f2e25b470bb62115f1741,
tags: 578f2e25b470bb62115f1745 },
{ _id: 578f2f119cd9848c1180be8b,
tags: 578f2f119cd9848c1180be8f },
{ _id: 578f2f119cd9848c1180be8b,
tags: 578f2f119cd9848c1180be8e },
{ _id: 578f50876a3ba88d13aed982,
tags: 578f50876a3ba88d13aed986 },
{ _id: 578f50876a3ba88d13aed982,
tags: 578f50876a3ba88d13aed985 },
{ _id: 578f510c6a3ba88d13aed989,
tags: 578f510c6a3ba88d13aed98c },
{ _id: 578f510c6a3ba88d13aed989,
tags: 578f510c6a3ba88d13aed98d } ]
我去掉那麼這個查詢錯誤。我想要組tag
並顯示5個最受歡迎的標籤。如何解決它?
的結果,我想看起來像
[ { tags: 578857529507cafd5fe1f9b6, count: 10 },
{ tags: 578857529507cafd5fe1f9b7, count: 9 },
{ tags: 578854779507cafd5fe1f9a6, count: 8 },
{ tags: 578854779507cafd5fe1f9a5, count: 5 },
{ tags: 5788570d9507cafd5fe1f9b0, count: 2 } ]