заполнить или собрать 2 коллекции с сортировкой и разбиением на страницы - PullRequest
0 голосов
/ 10 сентября 2018

Я недавно использовал mongoose и немного растерялся, как его отсортировать и разбить на страницы.

Допустим, я создал какой-то проект, такой как твиттер, и у меня было 3 схемы.первый - пользователь, второй - пост, а третий - post_detail.Схема пользователя содержит данные, которые имел пользователь, сообщение больше похоже на статус fb или твит, который мы можем ответить на него, post_detail похоже на ответы пользователя

user

var userSchema = mongoose.Schema({
    username: {
        type: String
    },
    full_name: {
        type: String
    },
    age: {
        type: Number
    }
});

post

var postDetailSchema = mongoose.Schema({
    message: {
        type: String
    },
    created_by: {
        type: String
    }
    total_reply: {
        type: Number
    }
});

post_detail

var postDetailSchema = mongoose.Schema({
    post_id: {
        type: String
    }
    message: {
        type: String
    },
    created_by: {
        type: String
    }
});

отношение user._id = post.created_by, user._id = post_detail.created_by, post_detail.post_id = post._id

скажемПользователь A делает 1 пост и 1000 других пользователей комментируют эти посты, как мы можем отсортировать комментарий по имени пользователя?пользователь может изменить данные (полное имя, возраст в данном случае), поэтому я не могу поместить данные в post_detail, потому что данные могут изменяться динамически, или я просто помещаю их в post_detail, а если данные изменения пользователя, я просто меняю также post_detail?но если я сделаю это, мне нужно изменить много строк, потому что если одни и те же пользователи комментируют 100 сообщений, то эти данные тоже нужно изменить.

проблема в том, как отсортировать их, я думаю, что если я смогу их отсортировать, яможет тоже разбить на страницыили в этом случае я должен просто использовать rdbms вместо nosql?

спасибо, во всяком случае, очень ценю помощь и руководство :))

1 Ответ

0 голосов
/ 10 сентября 2018

Добро пожаловать в MongoDB. Если вы хотите сделать это так, как вы описываете, просто не переходите на Монго. Вы разрабатываете схему, основанную на отношениях, а не на документах. Ваш дизайн требует выполнения объединений, и это не очень хорошо работает в монго, потому что нет простого / быстрого способа сделать это.

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

По вашему вопросу:

или я просто помещаю его в post_detail, и если пользователь меняет данные, я просто изменить post_detail тоже?

Да, это то, что вы должны делать. Если вы хотите иметь возможность сортировать документы по имени пользователя, вы должны денормализовать его и включить в post_details. Если бы мне пришлось разработать схему, это было бы что-то вроде этого:

{
  "message": "blabl",
  "authorId" : "userId12",
  "total_reply" : 100,
  "replies" : [
    {
      "message" : "okk",
      "authorId" : "66234",
      "authorName" : "Alberto Rodriguez"
    },
    {
      "message" : "test",
      "authorId" : "1231",
      "authorName" : "Fina Lopez"
    }
    ]
}

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...