Много ко многим в MongoDB - PullRequest
       15

Много ко многим в MongoDB

3 голосов
/ 04 августа 2011

Я решил попробовать MongoDB и посмотреть, насколько хорошо мы ладим.У меня есть несколько вопросов.

Помещение

  • У меня есть пользователи (идентификатор, имя, адрес, пароль, адрес электронной почты и т. Д.)
  • У меня есть штампы (идентификатор, тип, стоимость, цена и т. д.)
  • Пользователи просматривают архив марок и фильтруют его различными способами (нумерация страниц, фильтруют по цене, типу, имени и т. д.), выбирают марку и добавляют ее в свою коллекцию..
  • Пользователи могут добавить в коллекцию более одной марки (1 монетный двор и одну использованную или только 2 использованных)
  • Пользователи могут пометить некоторые из своих марок для продажи или обмена иperhapa уточняйте цену.

Пока

Вот что у меня есть:

{
 _id : objectid,
 Name: "bob",
 Email: "bob@bob.com",
 ...
 Stamps: [stampid-1, stampid-543,...,stampid-23]
}

Вопросы

  1. Как следуетЯ добавляю состояние принадлежащего штампа, его количество и состояние?
  2. Какие бы были примеры запросов для ситуаций, описанных ранее?
  3. Насколько я знаю, ensureindex делает это такВы уменьшаете количество «отсканированных» записей.

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

Ответы [ 2 ]

3 голосов
/ 04 августа 2011

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

Например, что-то вроде этого:

{
    _id : objectid,
    Name: "bob",
    Email: "bob@bob.com",
    ...
    Stamps : [
        {
            _id: id,
            type: 'type',
            price: 20,
            forSale: true/false,
            quantity: 2
        },
        {
            _id: id2,
            type: 'type2',
            price: 5,
            forSale: false,
            quantity: 10
        }
    ]
}

Вы можете видеть, что некоторые данные дублируются между коллекцией марок и массивом марок в пользовательской коллекции. Вы делаете это со свойствами, которые вы получаете доступ чаще. Потому что в противном случае вам придется делать findOne для каждой марки, и лучше читать непосредственно данные, которые делают это в MongoDB. И таким образом вы можете добавить другие свойства, такие как количество и forSale, здесь.

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

Существует ссылка на видео, в котором обсуждается дизайн MongoDB, а также объясняется то, что я пытался объяснить здесь.

http://lacantine.ubicast.eu/videos/3-mongodb-deployment-strategies/

0 голосов
/ 23 сентября 2014

из фона SQL, борется также с NoSQL.Мне кажется, что многое зависит от того, насколько неизменными могут быть типы данных.Одна вещь, которая озадачивает меня в системах RDBMS, - то, почему невозможно сказать, что определенный столбец / поле является «неизменным».Если вы знаете, что поле является неизменяемым (или почти) в контексте NoSQL, мне кажется, что более приемлемо дублировать информацию.Является ли полная ересь предположением, что во многих случаях вам может понадобиться комбинация структур SQL и NoSQL?

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