2016-07-15 1 views
0

を埋め込まれた文書を移入:のNode.js - を考えるとマングース

var productSchema = new Schema({ 
    name: String, 
    details : [{ name: String, description: String }] 
}) 


var listSchema = new Schema({ 
    name: String, 
    products: [{ 
    product_id: { type: Schema.Types.ObjectId, ref: 'Product' }, 
    product_vid: { type: Schema.Types.ObjectId, ref: 'Product.details' } 
    }] 
}) 

は、どのように私はそれだけでproduct_vidにマッチするひとつの詳細とのproduct_id対応するリストの照会を行うことができますか?

List.findById(list_id) 
    .populate({ 
     path: 'products.product_id', 
     populate: { 
     path: 'products.product_vid' 
     } 
    }) 
    .exec(function(err, doc){ 
     ...... 
} 

答えて

0

これは

product_vid: { type: Schema.Types.ObjectId, ref: 'Product.details' } 

詳細は、モデルのフィールドで間違っています。モデル自体ではありません。

何かのような..

var listSchema = new Schema({ 
    name: String, 
    products: [{ type: Schema.Types.ObjectId, ref: 'Product' }], 
}) 

、その後

populate('products') 

またはおそらく

populate('products products.details') 

ただ、試してみて、私に知らせなければなりません。

+0

これはうまくいきません...私は前に試しました。 「スキーマがモデルproduct.detailsに登録されていません」というエラーが表示されます – tellingeric

+0

product.detailまたはproducts.product_idを意味しましたか?ああ、これは間違っていると思う。 product_vid:{type:Schema.Types.ObjectId、ref: 'Product.details'} – enRaiser

+0

しかし、正しいバージョンの詳細を取得するにはどうすればよいですか?私はちょうど良い詳細を持つ適切な製品を取得したいです..(その理由は、私はリストの製品の配列内にproduct_vidを入れて) – tellingeric

3

listSchemaで

product_vid: { 
type: Schema.Types.ObjectId, ref: 'Product.details'} 

の必要はありません。

var productSchema = new Schema({ 
name: String, 
details : [{ name: String, description: String }] 
    }) 


var listSchema = new Schema({ 
    name: String, 
    products: [{ type: Schema.Types.ObjectId, ref: 'Product' }]) 

     List.findById(list_id) 
     .populate({ 
       path: 'products', 
       match: { details: "your matching value"}) 
      .exec(function(err, doc){ 
        ...... 
     } 
+0

私はproduct_vidを削除する場合、どのように対応する詳細を製品に入力できますか?一致する値のように_idが詳細であり、リストのどこかに格納する方法を見つける必要がありますか? – tellingeric

+0

あなたは、一致を引き起こした配列要素だけでなく、配列全体を返すでしょう。 –

関連する問題