2017-07-02 21 views
2

私は現在2つのスキーマを持っています。Mongoose/MongoDB - ObjectIdを持たない別のスキーマの参照

var carSchema = new mongoose.Schema({ 
    id: { 
     type: Number, 
     unique: true, 
     required: true 
    }, 
    make: { 
     type: String, 
     required: true 
    }, 
    model: { 
     type: String, 
     required: true 
    }, 
    year: { 
     type: Number, 
     required: true, 
     min: config.MIN_YEAR, 
     max: config.MAX_YEAR 
    }, 
    color: { 
     type: String 
    }, 
    price: [ 
     // don't know what to put here... 
    ], 
}); 


var priceSchema = new mongoose.Schema({ 
    car_id: { 
     type: Number 
    }, 
    amount: { 
     type: Number, 
     min: 0 
    }, 
    year: { 
     type: Number, 
     min: config.MIN_YEAR, 
     max: config.MAX_YEAR 
    } 
}); 

上記の2つのスキーマからわかるように、私は車のスキーマから価格スキーマへの参照をしようとしています。私はあなたがObjectId(_id)を参照することによってそれを行うことができることを知っていますが、私はcar_idを通して価格スキーマを参照する必要があります。理由は、既にテーブルヘッダーを定義しているCSVファイルからすべてのデータを読み込んでいるためです。この参照をするためのマングースの方法はありますか?

+1

なぜなら、 'car_id'と' _id'(新しく作成された)の両方を保持しないのはどうでしょうか?他のIDでは 'populate'の恩恵を受けることができないからです。 –

+0

@ TalhaAwan私は 'car_id'と' _id'の両方を利用して価格スキーマへの参照を可能にする方法で、私のスキーマをどのように構造化しますか?それは私がかなり得意ではないです – calviners

+1

CSVファイルからレコードをインポートして価格オブジェクトを作成すると、 'car_id'と' _id'(デフォルトで入力する)の両方があります。車内の価格参照の配列に '_id'を入力します。 、 '(私はあなたがする私に言った考えるものである)私はもともと書いたものである[ { "価格" タイプ:::mongoose.Schema.Types.ObjectId、 REF}]価格' @TalhaAwan –

答えて

0

車のスキーマの上に価格のスキーマを定義してから料金スキーマを車のスキーマに配置します。

... 
color: { 
    type: String 
}, 
price: [priceSchema] 
... 
0

あなたはこれを行うことができます。そして、車のモデルをとして作る

var carSchema = new mongoose.Schema({ 
    id: { 
     type: Number, 
     unique: true, 
     required: true 
    }, 
    make: { 
     type: String, 
     required: true 
    }, 
    model: { 
     type: String, 
     required: true 
    }, 
    year: { 
     type: Number, 
     required: true, 
     min: config.MIN_YEAR, 
     max: config.MAX_YEAR 
    }, 
    color: { 
     type: String 
    }, 
    price: { 
     type: mongoose.Schema.Types.ObjectId, ref: 'Price' 
    }, 
}); 

var priceSchema = new mongoose.Schema({ 
    car_id: { 
     type: Number 
    }, 
    amount: { 
     type: Number, 
     min: 0 
    }, 
    year: { 
     type: Number, 
     min: config.MIN_YEAR, 
     max: config.MAX_YEAR 
    } 
}); 

は、次に続く

var Price = mongoose.model('Price', priceSchema); 

として価格のモデルを作ります:

var Car = mongoose.model('Car', carSchema); 

これはトリックを行います。

Car.find({_id: 1}) 
.populate('price') 
.exec(function(err, car) { 
    // do stuff with your car objects 
}); 
関連する問題