我定义的数据模型如下:
import mongoose from 'mongoose';
const schema = mongoose.Schema({
title: {type: String, required: true},
content: {type: String, required: true},
language: {type: String, required: true},
label: [{type: String, required: false}],
createTime: {type: Date, default: Date.now},
updateTime: {type: Date, default: Date.now}
});
const Snippet = mongoose.model('Snippet', schema, 'snippet');
export default Snippet;
我想要的是当我使用:
Snippet.aggregate({...})
如果数据是:
[{
title: 'a',
content: 'b',
language: 'javascript'
},{
title: 'a',
content: 'b',
language: 'javascript',
label: ['new', 'old']
},
{
title: 'a',
content: 'b',
language: 'javascript',
label: ['old']
}]
我想要的结果是这样的:
{
languageCount : [
{
language : 'javascript',
count : 3
}],
labelCount : [
{
label : 'new',
count : 1
},
{
label : 'old',
count : 2
}]
}
我不知道如何完成我的“…”部分。
任何人谁有任何想法或任何其他方式可以解决它请告诉我,谢谢!
最佳答案
如果mongod
版本
[
{
"$unwind":"$label"
},
{
"$group":{
"_id":{
"lang":"$language",
"label":"$label"
},
"count_label_per_lang":{
"$sum":1
}
}
},
{
"$group":{
"_id":"$_id.lang",
"labels":{
"$push":{
"label":"$_id.label",
"count":"$count_label_per_lang"
}
},
"count":{
"$sum":"$count_label_per_lang"
}
}
}
]
关于mongodb - 关于mongoDB的聚合难题?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42131619/