MongoDB中的Stat跟踪

时间:2017-03-27 10:33:53

标签: mongodb

我正在创建一个Node + MongoDB应用程序,用户可以将书籍保存到他们的“库”中。当前工作版本只有一个用户集合,如下所示:

users:[
{
    _id: ...,
    name: “Name”,
    … other info,
    library: [
        {
            bookName: “In Cold Blood”,
            author: “Truman Capote”
            ISBN: 123783742
            _id: ...
        }
    ]
},
... other users]

这在功能上符合我的需要。但从长远来看,我可能想要显示一些涉及所有用户的统计信息。例如,最受欢迎的书籍或最受欢迎的作者,或流派。

我想我必须为我要跟踪的每件事创建一个新的集合,然后每当用户保存一本书时,检查它的类型和作者等是否已经在数据库,如果没有创建它们,并保持一个单独的总喜欢那里?这是否是在noSQL数据库中处理此类事情的正确方法?有没有更好的方法?

由于

1 个答案:

答案 0 :(得分:1)

你应该看看MongoDB的aggregation pipeline。您可以保留一组统计信息,但它们可能与您的实际数据不同步。

通过使用MongoDB的聚合管道,您可以轻松地汇总数据,以确定哪个是最受欢迎的书籍/作者/流派:

db.users.aggregate(
  [
    { $unwind : "$library" },
    { $group : { _id : "$library.bookName" , number : { $sum : 1 } } },
    { $sort : { number : -1 } },
    { $limit : 5 }
  ]
)

如果可能,请尝试限制聚合的范围,以便它不需要在尽可能多的用户上进行聚合。您可以在$match阶段之前使用$unwind阶段执行此操作。