Cha*_*nce 6 mongoose mongodb node.js
我有以下架构; 地址是一个地理编码的位置,代理商有许多地址.我的问题是,如果我希望能够根据其地址对代理进行地理空间搜索,那么我是否需要以某种方式在代理级别(已在地址架构级别编制索引)对其进行索引?
此外,我很难找到有关如何基于嵌套文档查找的信息.在这种情况下,是否有可能做我希望的事情,或者我应该扩展我的域结构并拥有"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'});
Run Code Online (Sandbox Code Playgroud)
机构:
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}
});
Run Code Online (Sandbox Code Playgroud)
Ram*_*Vel 11
我没有猫鼬的经验,所以我可以解释一般的mongodb索引.从您的问题我了解到多个Address地理编码文档嵌入到代理商.
如果您使用的是mongodb版本<= 1.8,则无法索引嵌套的地理编码文档.但该功能是从1.9版本添加的.我已经成功使用了几个月的同一种模式.但它是一个发展(不稳定)分支.
幸运的是,版本2.0在一周前发布.而且稳定.有关详细信息,请查看链接2.0发行说明.
而且您无法直接在嵌入式文档上编制索引.
它必须从mongodb shell这样做
db.Agency.ensureIndex({"Address.location": 2d})
Run Code Online (Sandbox Code Playgroud)
我不知道mongoose的确切语法,可能是这样的
AgencySchema.index({'Address.location': '2d'});
Run Code Online (Sandbox Code Playgroud)
查看mongodb索引了解更多信息
| 归档时间: |
|
| 查看次数: |
3579 次 |
| 最近记录: |