MongoDB中的统计跟踪
我正在制作一个Node+MongoDB应用程序,用户可以将书籍保存到他们的“图书馆”。当前工作版本只有一个用户集合,如下所示:MongoDB中的统计跟踪,mongodb,Mongodb,我正在制作一个Node+MongoDB应用程序,用户可以将书籍保存到他们的“图书馆”。当前工作版本只有一个用户集合,如下所示: users:[ { _id: ..., name: “Name”, … other info, library: [ { bookName: “In Cold Blood”, author: “Truman Capote” ISBN: 12378374
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阶段完成此操作。谢谢您的回答。这看起来可能会奏效——我将不得不花一些时间了解它是如何工作的,但我相信从长远来看这是值得的。干杯是的,在学习聚合时有一点学习曲线,但它们非常强大。这与最初的问题完全无关,但如果您对聚合/统计感兴趣,请查看。