2017-01-30 4 views
0

モンゴースの移植機能を利用しようとすると、最もひどい問題が発生します。私はここですべてのスレッドを見てきましたが、何も助けてくれませんでした。私のスキーマは下にマップされています。モンゴースの移植方法

'use strict'; 

/** 
* Module dependencies. 
*/ 
var mongoose = require('mongoose'), 
    Schema = mongoose.Schema; 


/** 
* Prodcut Feature Extra 
*/ 
var extra = new Schema({ 
    name: { 
    type: String, 
    default: '', 
    required: 'Please fill Product name', 
    trim: true 
    }, 
    price: { 
    type: Number, 
    default: 0 
    }, 
    description: { 
    type: String, 
    trim: true 
    }, 
    toolTip: { 
    type: String, 
    trim: true, 
    min: 3, 
    max: 140 
    }, 
    created: { 
    type: Date, 
    default: Date.now 
    }, 
    user: { 
    type: Schema.ObjectId, 
    ref: 'User' 
    } 
}); 

/** 
* Product Feature Schema 
*/ 
var feature = new Schema({ 
    name: { 
    type: String, 
    default: '', 
    required: 'Please fill feature name', 
    trim: true 
    }, 
    created: { 
    type: Date, 
    default: Date.now 
    }, 
    user: { 
    type: Schema.ObjectId, 
    ref: 'User' 
    } 
}); 

/** 
* Product Schema 
*/ 
var ProductSchema = new Schema({ 
    name: { 
    type: String, 
    default: '', 
    required: 'Please fill Product name', 
    trim: true 
    }, 
    created: { 
    type: Date, 
    default: Date.now 
    }, 
    features: [feature], 
    extras: [extra], 
    user: { 
    type: Schema.ObjectId, 
    ref: 'User' 
    } 
}); 

mongoose.model('Feature', feature); 
mongoose.model('Extra', extra); 
mongoose.model('Product', ProductSchema); 

私はマングースのREPLで次のクエリをすべて試してみましたが、何も、誰もが何か提案を持っています

models.Product.find().populate("Extra", "name").exec() 
 
models.Product.find().populate({path: "extras", location: "Extra"}).exec() 
 
models.Product.find().populate('extras', 'name').exec() 
 
models.Product.find().populate('extras', 'Extra').exec()

に動作しますか?これは私を殺している!!

+0

手段 "が、何も動作" 何を提示してください動作するはずです。エラーはありますか? –

+0

Mongooseのバージョンはわかりませんが、私はSchema.ObjectIdを有効な型として見たことがありません。それは "Schema.Types.ObjectId"と読むべきです - 少なくともスキーマの検証エラーを引き起こすはずです... – SylonZero

+0

何を達成したいですか?あなたのスキーマでは、 'extras'は参照ではなく、埋め込まれたドキュメントですが、そのように動作するはずはありません。あなたが本当にしたいことを説明してください、そして私たちはあなたを助けることができます。 –

答えて

1

ちょっと好奇心旺盛!

この初期化は、ProductSchemaで参照する前に行う必要はありませんか?これより、この

mongoose.model('Feature', feature); 
mongoose.model('Extra', extra); 

var ProductSchema = new Schema({ 
name: { 
type: String, 
default: '', 
required: 'Please fill Product name', 
trim: true 
}, 
created: { 
    type: Date, 
    default: Date.now 
}, 
features: [ { 
    type: Schema.ObjectId, 
    ref: 'Feature' 
}], 
extras: [ { 
    type: Schema.ObjectId, 
    ref: 'Extra' 
}], 
user: { 
    type: Schema.ObjectId, 
    ref: 'User' 
} 
}); 

よう

mongoose.model('Feature', feature); 
mongoose.model('Extra', extra); 

何かが

models.Product.find().populate("extras") 
関連する問題