我正在创建一个具有Tinder功能的应用程序。目前我在3个单独的集合中存储用户的喜欢,不喜欢和匹配,这些集合是这样构建的
{
"_id" : "user1_ID",
"matches" : [
{
"matchID" : "user2_ID",
"time" : "2015-01-16 21:19:50 America/Los_Angeles"
}
]
}
" _id" field保存我们正在存储的用户的ID以及" matches.matchID"字段包含特定用户已匹配的用户的ID。 " matches.time" field保存与该用户匹配的时间戳。
Likes and Dislikes系列与match系列相同,只是它们包含某个用户不喜欢或喜欢的用户的ID。
我目前遇到的问题是我需要查询所有3个集合,以确保我不会向用户发送他们已经喜欢,不喜欢或匹配的其他用户,因此合并这些会更容易将3个集合合并为一个,并将其结构如下:
{
"_id" : "user1_ID",
"matches" : [
{
"matchID" : "user2_ID",
"time" : "2015-01-17 15:47:15 America/Los_Angeles"
}
],
"likes" : [
{
"likeeID" : "user3_ID",
"time" : "2015-01-17 15:47:15 America/Los_Angeles"
}
],
"dislikes" : [
{
"dlikeeID" : "user4_ID",
"time" : "2015-01-17 15:47:15 America/Los_Angeles"
}
]
}
虽然这可能使查询更容易,但我担心这些数组可能会变得太大并使文档太大。
存储此数据的正确方法是什么?我已经读过gridFS有助于分解大型文档,这是可行的方法吗?如果是这样,我该怎么做呢?我对gridFS的工作方式还不太熟悉。
答案 0 :(得分:2)
这是一个非常有趣的问题。虽然我想可能有不止一个解决方案,但我想特别关注一个解决方案。我会考虑只使用您所述的一份文件,但将文件中存储的数据量保持在最低限度。
例如,您可以重写您的示例并节省大量字节:
{
"_id" : "user1_ID",
"matches" : [
{
"id" : "user2_ID",
"ts" : "1421544095534"
}
],
"likes" : [
{
"id" : "user3_ID",
"ts" : "1421544095534"
}
],
"dislikes" : [
{
"id" : "user4_ID",
"ts" : "1421544095534"
}
]
}
通过这种方法,您可以容纳数千场比赛。我会计算最大值是多少并验证给定用户是否足够匹配。
编辑:假设每个条件输入看起来都是这样的(就使用的字符数而言):
{"id" : "user2_ID", "ts" : "1421544095534"},
这大约是44个字节。我们可以舍入到50个字节。那;大约320,000个条目,你可以在一个BSON文件中。