我有以下架构;地址是一个地理编码的位置,代理商有许多地址。我的问题是,如果我希望能够根据其地址对代理商执行地理空间搜索,那么我是否需要以某种方式在代理商级别对其进行索引(已在地址架构级别编制索引)?
另外,我很难找到有关如何根据嵌套文档查找的信息。在这种情况下,是否有可能做我希望的事情,或者我应该扩展我的域结构并拥有“AgencyAddress”?这种方法对我来说似乎有点RDBMS,但我也可以看到它的优点。
我对如何使用来自Agency(或桥接对象AgencyAddress)的ObjectId引用而没有从地址返回的反向链接感到有点困惑。我不希望有回链接,因为地址将被应用程序中的许多其他对象使用。
谢谢!
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}
});
答案 0 :(得分:11)
我没有使用猫鼬的经验,所以我可以解释一般的mongodb索引。根据您的问题,我了解多个Address
地理编码文档已嵌入代理商。
如果您使用的是mongodb版本< = 1.8,则无法索引嵌套的地理编码文档。但该功能是从1.9版本添加的。我已经成功使用了几个月的同一种模式。但它是一个发展(不稳定)分支。
幸运的是,版本2.0在一周前发布。而且稳定。查看链接2.0 Release Notes了解详情。并且您无法直接在嵌入式文档上编制索引。
必须从mongodb shell
这样做 db.Agency.ensureIndex({"Address.location": 2d})
我不知道mongoose的确切语法,可能就像这样
AgencySchema.index({'Address.location': '2d'});
查看mongodb indexing了解详情