这是我的朋友收藏
[
{
"_id": "59e4fbcac23f38cdfa6963a8",
"friend_id": "59e48f0af8c277d7a8886ed7",
"user_id": "59e1d36ad17ad5ad3d0453f7",
"__v": 0,
"created_at": "2017-10-16T18:34:50.875Z"
},
{
"_id": "59e5065f705a90cfa218c9e5",
"friend_id": "59e48f0af8c277d7a8886edd",
"user_id": "59e1d36ad17ad5ad3d0453f7",
"__v": 0,
"created_at": "2017-10-16T19:19:59.483Z"
}
]
这是我的Scores系列:
[
{
"_id": "59e48f0af8c277d7a8886ed8",
"score": 19,
"user_id": "59e48f0af8c277d7a8886ed7",
"created_at": "2017-10-13T09:02:10.010Z"
},
{
"_id": "59e48f0af8c277d7a8886ed9",
"score": 24,
"user_id": "59e48f0af8c277d7a8886ed7",
"created_at": "2017-10-11T00:56:10.010Z"
},
{
"_id": "59e48f0af8c277d7a8886eda",
"score": 52,
"user_id": "59e48f0af8c277d7a8886ed7",
"created_at": "2017-10-24T09:16:10.010Z"
},
]
这是我的用户集合。
[
{
"_id": "59e48f0af8c277d7a8886ed7",
"name": "testuser_0",
"thumbnail": "path_0"
},
{
"_id": "59e48f0af8c277d7a8886edd",
"name": "testuser_1",
"thumbnail": "path_1"
},
{
"_id": "59e48f0af8c277d7a8886ee3",
"name": "testuser_2",
"thumbnail": "path_2"
},
{
"_id": "59e48f0af8c277d7a8886ee9",
"name": "testuser_3",
"thumbnail": "path_3"
},
]
最后,我需要以特定时间段(比如说最近24小时)按照高分排序排序的朋友列表... ...
[
{
"friend_id": "59e48f0af8c277d7a8886ed7",
"friend_name":"test_user_2"
"thumbnail":"image_path",
"highscore":15
},
"friend_id": "59e48f0af8c277d7a8886edd",
"friend_name":"test_user_3"
"thumbnail":"image_path",
"highscore":10
}
]
实现这一目标的最佳方法是什么?我已经尝试过聚合管道,但是对于使用3个集合感到非常困惑。
答案 0 :(得分:0)
根据您的回答,文档中的500个条目的数组大小可能不是存储朋友的坏主意,因为您只在每个条目中存储“朋友ID”和“已创建”。它节省了一个集合。 如果通过仅选择所需的字段来在查询中投影数据,则不会出现太多性能问题。
每天增加30分;这取决于你做什么类型的查询。 通过每天添加30个分数,每个文档达到2MB限制需要一段时间。
关于加入不同的集合,有一个关于它的堆栈溢出问题:
How do I perform the SQL Join equivalent in MongoDB?
或
https://docs.mongodb.com/manual/reference/operator/aggregation/lookup/
您需要使用mongoDB中的聚合框架来使用if;不只是一个查找命令。