Database 获取集合mongodb中所有文档中多个元素的频率
这就是我的问题 我是mongodb的新手,有一个文档集,文档保存方式如下:Database 获取集合mongodb中所有文档中多个元素的频率,database,mongodb,mongodb-query,aggregation-framework,aggregate,Database,Mongodb,Mongodb Query,Aggregation Framework,Aggregate,这就是我的问题 我是mongodb的新手,有一个文档集,文档保存方式如下: { "_id": { "$oid": "60626db173b4ca321c02ee3e" }, "year": "2021", "name": "Book 1", "authors": ["Joe, B", "Je
{
"_id": {
"$oid": "60626db173b4ca321c02ee3e"
},
"year": "2021",
"name": "Book 1",
"authors": ["Joe, B", "Jessica, K"],
"createdAt": {
"$date": "2021-03-30T00:15:45.859Z"
}
},
{
"_id": {
"$oid": "60626db173b4ca321c02ee4e"
},
"year": "2021",
"authors": ["Carl, B", "Jessica, K"],
"name": "Book 2"
"createdAt": {
"$date": "2021-03-30T00:15:45.859Z"
}
},
我需要得到所有作者的频率和书的年代
预期结果如下(只要我能得到每个元素的频率,结果如何返回并不重要):
我见过这个线程,它在一个数组中完成这项工作,但我不知道是否有可能同时获得多个元素(年份、作者)的频率,或者如何做到这一点
谢谢你的帮助。谢谢。演示-
按年份将作者放入数组中,将年度发生数放入个人文档中
按作者排序并获取作者出现的次数
按null组合所有文档,使用推送唯一值并转换以获得最终输出
演示2-对于按年份分组的作者计数-@jay2p取决于您拥有的数据集有多大,如果您的数据较小,则DB查询更好,但如果您拥有一个较大的数据集,则应使用DB和其馀代码进行一些计算。这很好,演示1就是我一直在寻找的!现在我只需要将它调整到10个字段:)!但是出于好奇和性能方面的考虑,假设我必须得到的频率不是两年(在本例中是年和作者),而是10种不同的事情(年、作者、出版商等等),最好一个接一个地做或者做一个大的查询?你知道哪个更快吗?谢谢你的回复。我明白了。有道理。再次感谢您。@jay2p很高兴它有帮助:)
{
"authors": {
"Joe, B": 1,
"Carl, B": 1,
"Jessica, K": 2
},
"year": {
"2021": 2
}
}
db.collection.aggregate([
{
$group: {
_id: { year: "$year" },
authors: { $push: "$authors" },
yearCount: { $sum: 1 }
}
},
{ $unwind: "$authors" },
{ $unwind: "$authors"},
{
$group: {
_id: { author: "$authors" },
year: { $first: "$_id.year" },
yearCount: { $first: "$yearCount" },
authors: { $push: "$authors" },
authorCount: { $sum: 1 }
}
},
{
"$group": {
_id: null,
years: {
$addToSet: { k: "$year", v: "$yearCount" }
},
authors: {
$addToSet: { k: "$_id.author", v: "$authorCount" }
}
}
},
{
$project: {
_id: 0,
years: { $arrayToObject: "$years" },
authors: { $arrayToObject: "$authors" }
}
}
])