2016-09-03 12 views
0

アロラ、私は初めてモングースを使用しています。私は2つのスキームを作成することに決めました。最初のものはユーザーを表し、2番目のものは彼の問い合わせを表します。私は問い合わせを検索し、そのステータスを更新する場合、それは彼らが別のオブジェクトであることを意味、ユーザーのアレイ上に同じ問い合わせを更新しないことがわかりネストされたオブジェクトは更新されていません

var userSchema = new mongoose.Schema({ 
    name: String, 
    enquires: { type : [Enquire.schema] , "default" : [] }, 
}); 

var enquireSchema = new mongoose.Schema({ 
    status: {type: String, 'default': 'pending'}, 
    enquire: String, 
}); 

:ようにユーザーが問い合わせの配列を持っています。私は、リレーショナルデータベースと同じであるのでIDの配列を保存したくないので、照会スキームを忘れてUserスキームだけを使用する1つの解決策を見ています。それはマングースの仕組みですか?すべての関係について、入れ子オブジェクトのようなものをすべて挿入する必要がありますか?

答えて

1

達成したいことを達成するには、referencesを使用する必要があります。 マングースの参照と追加に関する詳細については、Mongoose Populate documentation.

を参照してください。

ユーザー・スキーマ:

var userSchema = new mongoose.Schema({ 
    name: String, 
    enquires: [{ type : mongoose.Schema.Types.ObjectId , ref : 'Enquiry' }]//array of enquiries 
}); 

var User = mongoose.model('User',userSchema); 
module.exports = User; 

問い合わせスキーマ:

var enquireSchema = new mongoose.Schema({ 
    status: {type: String, 'default': 'pending'}, 
    enquire: String, 
}); 

var Enquiry = mongoose.model('Enquiry',enquireSchema); 
module.exports = Enquiry ; 

ワーキング:

  1. 新しいお問い合わせを作成します。
  2. ユーザーの照会配列にID(_id)をプッシュします。

    var enquiry = new Enquiry(); enquiry.enquire = "Dummy enquiry";//set the enquiry enquiry.save(function(err,result){ if(!err){ //push 'result._id' into users enquires array } });

  3. お問い合わせを更新するたびに、それが自動的に ユーザーのドキュメントに更新されます。

  4. populateを使用してユーザーの問い合わせを取得します。
+0

本当に、私は今週末に人口に関するこのことを発見します。乾杯! –

0

idを持ち文書のようなサブ文書(エンティティ)を埋め込むことができます。また、通常のプロパティのようにネイティブ配列を埋め込むこともできます。

そして、私はあなたのための正しい定義があると思う:

var enquireSchema = new mongoose.Schema({ 
    status: {type: String, 'default': 'pending'}, 
    enquire: String, 
}); 

var userSchema = new mongoose.Schema({ 
    name: String, 
    enquires: { type : [enquireSchema] , "default" : [] }, 
}); 

あなたが埋め込まれたリンクでrefsを使用する場合は、そこ二つの別々のコレクションがあるとDBの関係のようになります。

関連する問題