Могу ли я проиндексировать внедренный документ в Mongoose? - PullRequest
6 голосов
/ 18 сентября 2011

У меня есть следующие схемы; Адрес - это геокодированное местоположение, и у Агентства много адресов. У меня вопрос: если я хочу иметь возможность выполнять геопространственный поиск по агентству по его адресам, то нужно ли мне каким-то образом индексировать их на уровне агентства (уже проиндексирован на уровне схемы адресов)?

Кроме того, мне трудно найти информацию о том, как найти, основываясь на вложенных документах. В этом сценарии возможно ли даже сделать то, на что я надеюсь, или я должен немного расширить структуру своего домена и получить «AgencyAddress»? Этот подход мне кажется немного СУРБД, но я также вижу его преимущества.

Я немного озадачен тем, как я мог бы использовать ссылки ObjectId от Agency (или объект-мост AgencyAddress) без обратной ссылки с адреса. Я не хочу иметь обратных ссылок, потому что адрес будет использоваться рядом других объектов в приложении.

Спасибо!

var AddressSchema = new Schema({
  name        : {type: String, default : ''},
  street1     : {type: String, default : ''},
  street2     : {type: String, default : ''},
  city        : {type: String, default : '', required: true},
  state       : {type: String, required : true},
  zip         : {type: String, default ''},
  country     : {type: String},
  location    : {longitude: Number, latitude:Number}
  type        : {type: String, enum:['agent', 'agency', 'registrant'], index:true}
  created_at  : {type: Date, default: Date.now},
  updated_at  : {type: Date, default: Date.now}
  primary     : {type: Boolean, default: false}
});

AddressSchema.index({location: '2d'});

Агентство:

var AgencySchema = new Schema({
  name         : {type : String, default : '', required : true},
  Type         : {type : String, enum['medical', 'disaster-service', 'local-law', 'state-law', 'federal-law'], index:true},
  Addresses    : [Address], 
  created_at   : {type : Date, default : Date.now},
  updated_at   : {type : Date, default : Date.now}
});

1 Ответ

11 голосов
/ 19 сентября 2011

У меня нет опыта работы с мангустом, поэтому я могу объяснить индексацию mongodb в целом.Из вашего вопроса я понимаю, что в Агентство встроено несколько Address геокодированных документов.

Если вы используете версию mongodb <= 1.8, то невозможно проиндексировать вложенные геокодированные документы.Но функция добавлена ​​с версии 1.9.Я успешно использую пару месяцев для одной и той же схемы.Но это была ветка разработки (нестабильная). </p>

к счастью, версия 2.0 вышла неделю назад.И это стабильно.Обратитесь к ссылке 2.0 Примечания к выпуску для получения дополнительной информации.

И вы не можете напрямую индексировать встроенные документы.

это нужно сделать так из оболочки mongodb

   db.Agency.ensureIndex({"Address.location": 2d})

Я не знаю точный синтаксис для mongoose, может быть вот так

  AgencySchema.index({'Address.location': '2d'});

проверьте индексация mongodb для получения дополнительной информации

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