gpt4 book ai didi

mongodb - mongo 模式(嵌入与引用)

转载 作者:可可西里 更新时间:2023-11-01 09:37:49 25 4
gpt4 key购买 nike

<分区>

假设我正在设计一个类似 Foursquare 的服务,它根据用户位置跟踪用户签到。我使用 MongoDB 作为后端。

这里的前提是用户可以签到某个位置,因此架构中的集合可能如下所示:

db.places.find()
{ "_id" : ObjectId("4e6a5a58a43a59e451d69351"), "address" : { "street" : "2020 Lombard St", "city" : "San Francisco", "state" : "CA" }, "latlong" : [ 37.800274, -122.434914 ], "name" : "Marina Sushi", "timezone" : "America/Los_Angeles" }
{ "_id" : ObjectId("4e6a59c3a43a59e451d69350"), "address" : { "street" : "246 Kearny St", "city" : "San Francisco", "state" : "CA" }, "latlong" : [ 37.79054, -122.40361 ], "name" : "Rickhouse", "timezone" : "America/Los_Angeles" }

db.users.find()
{ "_id" : ObjectId("4e936bc1da06d5e081544b8b"), "_class" : "com.gosociety.server.common.model.User", "email" : "goso@gosociety.com", "password" : "asdfasdf"}

所以在上面的集合中,我们有地点和用户。用户可以“签到”一个地方,所以当用户签到时,我们会在数据库中保存记录。签到将包括:签到时间 (UTC) 和备注(150 个字符),以及是否已将其发送到他的 Facebook 动态( bool 值)。

根据描述,我想到了 Mongo 模式设计的两种替代方案:

  • 创建签到集合,并使用 mongo 生成的引用 ID 将其存储在用户集合中,并将地点集合作为每个集合中的签到 []。这样就可以很容易地确定每个用户和每个场所的汇总统计数据。

  • 不要创建签到集合,而是使用相同的签到信息更新地点和用户数据。

我相信我在 mongo 文档中读到,如果在没有包含聚合信息的对象的情况下被聚合的数据几乎从不显示,则应该直接使用聚合。如果我们遵循 foursquare 应用程序使用的方法,它只会在我们查看用户的个人资料时显示用户的总签到数,或者在我们查看他们的地点详细信息时显示签到统计信息。

如有任何建议,我们将不胜感激。

谢谢。

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com