2011-09-18 23 views
6

Tengo los siguientes esquemas; La dirección es una ubicación geocodificada y la Agencia tiene muchas direcciones. Mi pregunta es, si deseo poder realizar una búsqueda geoespacial en una agencia basada en sus direcciones, ¿debo indexarlas de alguna manera a nivel de agencia (ya indexado en el nivel de esquema de direcciones)?¿Puedo/debo indexar un documento incrustado en Mongoose?

Además, estoy teniendo dificultades para encontrar información sobre cómo buscar en base a documentos anidados. En este escenario, ¿es posible hacer lo que estoy esperando o expandir un poco la estructura de mi dominio y tener una "AgencyAddress"? Este enfoque me parece un poco RDBMS, pero también puedo ver sus ventajas.

Estoy un poco confundido acerca de cómo podría utilizar ObjectId refs de Agency (o un objeto puente AgencyAddress) sin un enlace invertido desde la dirección. No quiero tener enlaces de regreso porque la dirección será utilizada por una cantidad de otros objetos en la aplicación.

Gracias!

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'}); 

Agencia:

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} 
}); 

Respuesta

11

no tengo experiencia con la mangosta, por lo que puede explicar la indexación mongodb en general. De su pregunta entiendo que múltiples Address documentos geocodificados incrustados en la Agencia.

Si está utilizando mongodb versión < = 1.8, no es posible indexar los documentos geocodificados anidados. Pero la función se agrega desde la versión 1.9. He estado utilizando con éxito durante un par de meses para el mismo tipo de esquema. Pero era una rama de desarrollo (inestable).

afortunadamente la versión 2.0 se lanzó hace una semana. Y es estable. Consulte el enlace 2.0 Release Notes para obtener más información.

Y no puede indexar directamente en documentos incrustados.

que tiene que ser hecho como esto de consola MongoDB

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

no sé la sintaxis exacta para la mangosta, puede ser así

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

salida la mongodb indexing para obtener más información

+0

Ahh, eso es hombre perfecto. Gracias. – Chance

+0

No me parece perfecto. ¿Es realmente un requisito que el índice se cree en la consola mongo? – Greg

+1

@Greg "¿Es realmente un requisito que el índice se cree en la consola mongo?", Para nada, puede hacerlo a través de cualquier controlador de idioma que use, lo dije desde la consola porque no tengo ninguna experiencia con mangosta – RameshVel

Cuestiones relacionadas