схема монго (встраивание против ссылки) [дубликат]

На этот вопрос уже есть ответ здесь:

Связи MongoDB: вставлять или ссылаться? 9 ответов

Давайте предположим, что я разрабатываю такой сервис, как 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" : "[email protected]", "password" : "asdfasdf"}

Так что в приведенных выше коллекциях у нас есть места и пользователи. Пользователь может «зарегистрироваться» на месте, поэтому, когда пользователь регистрируется, мы сохраняем запись об этом в базе данных. Регистрация будет состоять из: времени регистрации (UTC) и заметки (150 символов), а также того, была ли она отправлена на его канал в Facebook или нет (булево).

Основываясь на описании, я мог бы придумать две альтернативы для проектирования схемы в Mongo:

Создайте коллекцию регистрации и используйте сгенерированный mongo ссылочный идентификатор, чтобы сохранить его в коллекции User, а коллекцию Places в качестве регистрации [] в каждой коллекции. Таким образом, было бы легко определить совокупную статистику по пользователям и по месту.

Не создавайте коллекцию регистрации, но обновляйте и данные о месте, и данные о пользователе, используя одну и ту же информацию о регистрации.

Я считаю, что я прочитал в документации Монго, что агрегация должна использоваться напрямую, если агрегируемые данные почти никогда не отображаются без Объекта, содержащего информацию агрегирования. Если мы следуем методу, который использует приложение foursquare, оно показывает общую регистрацию пользователей только тогда, когда мы просматриваем их профиль или размещаем статистику регистрации, когда мы видим детали их мест.

Любые предложения здесь будут высоко оценены.

Благодарю.

Ответы на вопрос(2)

Ваш ответ на вопрос