MongoDB: хранение массива подписчиков внутри родительского объекта

StackOverflow https://stackoverflow.com//questions/9673435

  •  12-12-2019
  •  | 
  •  

Вопрос

У меня в настоящее время есть коллекция каналов, которая хранится как следующее:

{ "_id" : ObjectId("4f5d1012d48147e840000000"), "title" : "Testing", "description" : "hello!", "created" : "2012-03-11 20:50:26", "user" : ObjectId("4f5d0408d48147207f000000") }
.

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

{ 
    "_id" : ObjectId("4f5d1012d48147e840000000"), 
    "title" : "Testing", 
    "description" : "hello!",
    "subscriptions" : 
        { "user" : ObjectId("USERIDHERE"), "created" : DATETIME },
        { "user" : ObjectId("USERIDHERE"), "created" : DATETIME },
        { "user" : ObjectId("USERIDHERE"), "created" : DATETIME }
    "created" : "2012-03-11 20:50:26", 
    "user" : ObjectId("4f5d0408d48147207f000000") 
}
.

Хотя я не могу, казаться головой, как чисто реализовать это в моем объекте лития.Будет ли мой свойство $story->vote Array, который я нажимаю на каждое обновление?

Это было полезно?

Решение

ИМХО, как вы структурируете, что будет зависеть от того, как вы будете использовать подписки.

Причина, по которой я говорю, что это из-за производительности, касается линии с встроенным объектом Mongo VS VS связанными коллекциями. http://www.mongodb.org/display/docs/schema+design

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

Использование здесь имеет смысл, потому что при вытянете коллекцию пользователя (для их панели управления или панели мониторин или передней страницы и т. Д.) У вас будет список каналов для отображения.

Встраивание пользовательских идентификаторов в канале, имело бы только смысл, если вы планируете отображать каналы и показывать все пользователи, которые подписываются на них, вроде, как система чата в переполнении стека.

Разместить их в отдельной коллекции, будет иметь смысл, если вы планируете выполнять агрегации или будете иметь больше, чем в одной коллекции доступа к подпискам.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top