我有一个应用程序,它以事件的形式存储用户及其行为。有两个集合,一个是用户集合,另一个是事件集合。这些文档看起来像这样:
用户
现在我想要能够根据用户的属性以及他们触发的事件和特定时间范围来获取用户列表。
一个例子查询可能是这样的:“在过去7天内至少发送了3条消息的所有来自法国的用户”。
我如何使用MongoDB实现这一点,还要考虑性能(例如,如果我有几百万个事件)?仅使用两个集合是否足够?还是必须使用聚合/映射减少?如果是这样,您会建议如何更改模式?
用户
事件
{
"_id" : ObjectId("593aa71e2f9d5140000bb44e"),
"name" : "Antonette Ortiz",
"country" : "France"
}
事件
{
"_id" : ObjectId("593aaa84c685604066a6a0cf"),
"name" : "message_sent",
"timestamp" : ISODate("2016-11-01T04:39:52.667Z"),
"user" : ObjectId("593aa728d135484002399bac"),
"attributes" : {
"str" : "plum",
"int" : 82
}
}
现在我想要能够根据用户的属性以及他们触发的事件和特定时间范围来获取用户列表。
一个例子查询可能是这样的:“在过去7天内至少发送了3条消息的所有来自法国的用户”。
我如何使用MongoDB实现这一点,还要考虑性能(例如,如果我有几百万个事件)?仅使用两个集合是否足够?还是必须使用聚合/映射减少?如果是这样,您会建议如何更改模式?