Как лучше всего сохранять семейное древо в mongodb через mongoose?

Я использую nodejs и mongoose и хочу сохранить генеалогическое древо для mongoose. У меня вопрос по схеме. Что будет лучше: иметь личную схему, в которой есть поле массива, в котором хранятся идентификаторы членов семьи, или есть какой-то другой способ сделать это. Потому что, если я хочу получить человека со всеми членами его семьи, машина должна пройти через всех людей и проверить их, являются ли они членами семьи этого человека. Есть ли более эффективный способ?

1 ответ

Решение

Что ты можешь сделать:

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

Пример с моделью семьи:

var FamilySchema = new Schema({
  name: String
});

var family = db.model('family', FamilySchema);

var PersonSchema = new Schema({
 name : String,
 family : { type : Mongoose.Schema.ObjectId, ref : 'family' }
});

Простой пример с фамилией в виде строки:

var PersonSchema = new Schema({
 name : String,
 family : String
});

Кроме того, если вы поместите индекс в поле семейства в пользовательской модели, будет очень быстро получить всех членов семьи кого-либо. Подробнее об индексе в базе данных mongodb: http://docs.mongodb.org/manual/indexes/

Решение второе: вы можете использовать коллекцию, модель семьи, содержащую всех членов семьи.

var PersonSchema = new Schema({
  name : String
});

var person = db.model('person', PersonSchema);

var FamilySchema = new Schema({
  name : String,

  members : [{ type : Mongoose.Schema.ObjectId, ref : 'person' }]
});

Другие вопросы по тегам