Создание запроса (присоединение) или корректировка дизайна? - PullRequest
2 голосов
/ 02 марта 2012

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

Просто и для меня кажется, что неправильное решение будет после поискавсе posts(db.post.find({email:'mo@gmail.com'}), а затем циклически просматривая сообщения и делая один запрос на поиск для пользовательской коллекции, а затем объединяйте результаты.

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

// User, the profile is not complete there will be more fields
var u = {
    name: 'Michael', // Is not unique
    email: 'mo@gmail.com', // Should be also unique
    fbid: '4545454asdadsa'
}

db.user.insert(u);

// User can have 0 to many posts

var p = {
    title: 'Suprise',
    body: 'Well done',
    tags: ['first', 'post', 'english'],
    author: 'mo@gmail.com',
    created: new Date(),
    modified: new Date()
};
db.post.insert(p);

var p = {
    title: 'Weather in Estonia',
    body: 'Always looks bad',
    tags: ['bad', 'weather', 'estonia'],
    author: 'mo@gmail.com',
    created: new Date(),
    modified: new Date()
}
db.post.insert(p);

1 Ответ

2 голосов
/ 02 марта 2012
var p = {
    title: 'Suprise',
    body: 'Well done',
    tags: ['first', 'post', 'english'],
    author: {
        name: 'Michael', // Is not unique
        email: 'mo@gmail.com', // Should be also unique
        fbid: '4545454asdadsa'
    },
    created: new Date(),
    modified: new Date()
};

Вы встраиваете документы, вы денормализуете. Вот как это работает. Теперь вы можете просто получить все сообщения и не запрашивать пользователей, поскольку они уже есть.

Структура данных

Я объясню, как это можно сделать. Я полностью перешел за денормализацию. Это означает, что вам никогда не нужны объединения. Обратите внимание, что некоторые из них могут быть удалены, если они просто бесполезны и не нужны.

Коллекция сообщений

{
  title: String,
  body: String,
  tags: [String],
  author: {
    name: String,
    email: String,
    fbid: String
  },
  created: Date,
  modified: Date,
  comments: [{
    body: String,
    created: Date,
    modified: Date
  }]
}

Коллекция пользователей

{ 
  name: String,
  email: String,
  fbid: String,
  posts: [{
    title: String,
    body: String,
    tags: [String],
    created: Date,
    modified: Date,
    comments: [{
      body: String,
      created: Date,
      modified: Date
    }]
  }]
}

Сборник комментариев

{
  body: String,
  created: Date,
  modified: Date,
  author: {
    name: String,
    email: String,
    fbid: String
  },
  post: {
    title: String,
    body: String,
    tags: [String],
    created: Date,
    modified: Date
    comments: [{
      body: String,
      created: Date,
      modified: Date
    }]
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...