Могу ли я положить много ключей в коллекцию mongodb - PullRequest
0 голосов
/ 09 марта 2011

Я хочу сохранить хэш-значение в mongodb.

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

например. Человек (Джим) имеет одну работу (а) и три работы (б).

// Person
{
    _id: "4d772583c186233352000001"
    name: "Jim"
    works: {
        "4d772583c186233352000002": 1
        "4d772583c186233352000003": 3
        ...
    }
}

// Work
{
    _id: "4d772583c186233352000002"
    title: "Make cake"
    finished_at: ...
}
{
    _id: "4d772583c186233352000003"
    title: "Make iPhone"
    finished_at: ...
}
...

Если я храню работы, собственность человека, как указано выше. Путь к ключевому слову будет включать идентификатор работы и увеличиваться снова и снова. Это правильный путь?

1 Ответ

1 голос
/ 09 марта 2011

Я не совсем уверен, что понимаю настоящий вопрос здесь.Вы спрашиваете второе мнение о вашей схеме?Если так, то вот мое:

Нет ничего плохого в том, чтобы поддерживать отношения между коллекциями, используя идентификаторы документов, как вы сделали.Иногда это правильный (и единственный) путь, даже если вы сами берете на себя ответственность за поддержание отношений / ссылок, поскольку, как вы, вероятно, знаете, mongoDB не поможет вам в этом.

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

Я думаю, вам будет лучше использовать массив - возможно, вот так:

 works: [
        { "4d772583c186233352000002": 1 },
        { "4d772583c186233352000003": 3 }
 ]

Таким образом, вы получите лучшую поддержку от mongo в поддержании ваших ссылок, используя, например, $операторы pull и $ push.

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

works : [
     { work_id: "4d772583c186233352000002", quantity: 1 },
     { work_id: "4d772583c186233352000003", quantity: 3 }
]

Помогает ли это?

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