gpt4 book ai didi

mongodb - 频率表生成 - MongoDB

转载 作者:行者123 更新时间:2023-12-05 08:58:13 28 4
gpt4 key购买 nike

我需要在 MongoDB 中生成一个简单的频率表。假设我在名为 books 的集合中有以下文档。

{
"_id": 1,
genre: [
"Fantasy",
"Crime",
"Drama"
]
}
{
"_id": 2,
genre: [
"Drama"
]
}

预期的输出是:幻想:1犯罪:1戏剧:2

假设我对可能的流派没有预先形成的概念,我怎样才能让 MongoDB 检测流派并计算它们?这似乎是聚合框架的工作。

到目前为止,我已经到了这个阶段:

db.books.aggregate([
{
$group: {
_id: null,
test: {$push: "$genre"}
}
}
])

这并没有按预期工作,因为它只是从每个文档中添加了流派数组。谁能指出我正确的方向?我应该使用聚合框架吗?

谢谢!

最佳答案

在聚合框架中处理数组时,您通常需要做的是使用 $unwind .这会处理数组并实质上为每个数组成员生成一个新文档。将其视为使用 SQL JOIN 的“反规范化”。

一旦数组“展开”,您就可以处理您的 $group :

db.collection.aggregate([
{ "$unwind": "$genre" },
{ "$group": {
"_id": "$genre",
"count": { "$sum": 1 }
}}
])

这给出了如下输出:

{ "_id" : "Drama", "count" : 2 }
{ "_id" : "Crime", "count" : 1 }
{ "_id" : "Fantasy", "count" : 1 }

提供给 $group_id 是您要分组的“键”,在您的情况下,这是“流派”,因为它是“值”通过在 $ "$genre"前加上前缀。 $sum只需将每次出现的值加起来 1,这通常是您的计数方式。

SQL to Aggregation mapping chart 中显示了几个示例,这不仅是对那些使用 SQL 的人有用的指南,而且还提供了一般的实际用法示例。

关于mongodb - 频率表生成 - MongoDB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24924930/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com