MongoDB中的统计跟踪

MongoDB中的统计跟踪,mongodb,Mongodb,我正在制作一个Node+MongoDB应用程序,用户可以将书籍保存到他们的“图书馆”。当前工作版本只有一个用户集合,如下所示: users:[ { _id: ..., name: “Name”, … other info, library: [ { bookName: “In Cold Blood”, author: “Truman Capote” ISBN: 12378374

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

users:[
{
    _id: ...,
    name: “Name”,
    … other info,
    library: [
        {
            bookName: “In Cold Blood”,
            author: “Truman Capote”
            ISBN: 123783742
            _id: ...
        }
    ]
},
... other users]
这在功能上满足了我的需要。但从长远来看,我可能希望显示一些涉及所有用户的统计数据。例如,最受欢迎的书或最受欢迎的作者或流派

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


谢谢

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

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

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

如果可能,尝试限制聚合的范围,这样就不需要聚合过多的用户。您可以在$unwind阶段之前使用$match阶段完成此操作。

谢谢您的回答。这看起来可能会奏效——我将不得不花一些时间了解它是如何工作的,但我相信从长远来看这是值得的。干杯是的,在学习聚合时有一点学习曲线,但它们非常强大。这与最初的问题完全无关,但如果您对聚合/统计感兴趣,请查看。