2011-09-18 11 views
6

私は以下のスキーマを持っています。住所はジオコーディングされた場所であり、代理店には多くの住所があります。私の質問は、住所に基づいて代理店の地理空間検索を実行できるようにするには、代理店レベル(既に住所スキーマレベルで索引付けされている)で何らかのインデックスを作成する必要がありますか?Mongooseで埋め込み文書のインデックスを作成することはできますか?

また、ネストされたドキュメントに基づいて検索する方法に関する情報を見つけるのが難しいです。このシナリオでは、私が望んでいることを実行することさえ可能ですか、私はドメイン構造を少し拡張して、 "AgencyAddress"を持っているべきですか?このアプローチは私には少しRDBMSのようですが、私はそれの利点を見ることもできます。

私は、AgencyA(またはブリッジオブジェクトAgencyAddress)からのObjectId refをどのように使用して、逆のリンクバックアドレスなしで使用できるか混乱しています。アドレスはアプリ内の他の多くのオブジェクトによって使用されるため、私はリンクをバックにしたくありません。

ありがとうございます!

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

答えて

11

私はマングースの経験を持っていけないので、私は一般的に、MongoDBのインデックス作成を説明することができます。あなたの質問から、複数のAddressジオコードされたドキュメントが代理店に組み込まれていることを理解しています。

mongodbバージョン< = 1.8を使用している場合、ネストされたジオコードされたドキュメントのインデックスを作成できません。しかし、この機能はバージョン1.9から追加されました。私は同じ種類のスキーマのために数ヶ月間うまく使用してきました。しかし、それは開発(不安定)ブランチでした。

幸いにもバージョン2.0が1週間前にリリースされます。そして安定している。詳細はリンク2.0 Release Notesをご覧ください。

埋め込みドキュメントで直接インデックスを作成することはできません。それはMongoDBのシェルから次のように行われなければ

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

を持って

私はマングースのための正確な構文を知らない、この

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

ようなものかもしれ詳細はmongodb indexingをチェックしてください

+0

ああ、完璧な男です。ありがとうございました。 – Chance

+0

それは私にとって完璧だとは思わない。 mongoコンソールでインデックスが作成されることは本当に必要条件ですか? – Greg

+1

@Greg「インデックスがmongoコンソールで作成されるというのは本当に必要条件なのですか?」というのは、あなたが使用している言語ドライバを使って行うことができます。私はコンソールから言いました。モンゴースの経験はありません。 – RameshVel

関連する問題