我們假設我設計了一個像Foursquare這樣的服務,它可以根據用戶位置跟蹤用戶檢查。我使用MongoDB作爲後端。mongo schema(嵌入vs參考)
的這裏的前提是,用戶可以簽入到一個位置,所以在架構集合可能是這樣的:
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" : "[email protected]", "password" : "asdfasdf"}
所以在上面的藏品,我們有地方和用戶。用戶可以「登記」到某個地方,因此當用戶登記時,我們會在數據庫中保存一份記錄。登記手續包括:登記時間(UTC)和記事(150個字符),以及它是否發送到他的Facebook飼料或不(布爾)。
基礎上的描述,我可以在蒙戈認爲兩個備選方案的架構設計:
創建一個簽入的收集,並使用蒙戈產生的參考ID來存儲用戶收集,和將收藏放入每個收藏中作爲簽入[]。通過這種方式,可以輕鬆確定每個用戶和每個場所的彙總統計信息。
不要'創建簽入集合,但更新地方和用戶數據與相同的簽入信息。
我相信我蒙戈文件如果被聚合的數據幾乎從來不含有聚合信息的顯示對象應直接使用的聚集讀取。如果我們按照foursquare應用使用的方法進行操作,則僅當我們查看他們的個人資料或查看他們的地點詳情時,纔會顯示用戶的全部登記入住情況。
這裏的任何建議將不勝感激。
謝謝。