我可以/应该索引一个embedded式文件在Mongoose中吗?

我有以下模式; 地址是经过地理编码的地址,机构有许多地址。 我的问题是,如果我希望能够根据其地址对代理机构执行地理空间search,那么我是否需要以代理级别对其进行索引(已经在地址架构级别进行了索引)?

此外,我很难find有关如何基于嵌套文件查找信息。 在这种情况下,甚至有可能做我所希望的,或者我应该扩大我的域名结构,并有一个“AgencyAddress”? 这种方法似乎有点RDBMS给我,但我也可以看到它的优点。

我有点困惑,我可以如何使用来自代理(或桥对象代理地址)的ObjectId refs没有从地址反向链接。 我不想有反向链接,因为地址将被应用程序中的许多其他对象使用。

谢谢!

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

我没有mongoose的经验,所以我可以解释一般的mongodb索引。 从你的问题我明白,多个Address geocodedembedded到代理文档。

如果您使用的是mongodb版本<= 1.8,则无法索引嵌套的地理编码文档。 但该function是从1.9版本添加的。 我已经成功地使用了几个月的相同types的模式。 但这是一个发展(不稳定)的分支。

幸运的是,2.0版本是在一周前发布的。 而它的稳定。 查看链接2.0发行说明了解更多信息。

而且你不能直接在embedded式文件上索引。

它必须像这样从MongoDBshell完成

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

我不知道mongoose的确切语法,可能是这样的

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

检查出mongodb索引的更多信息