2016-03-23 10 views
1

に移入されていない私はマングース移入方法が値

var ServiceSubType = new Schema({ 

    displaySubTypeName   : String, 
    subTypeDescription   : String, 
    status      : { type: String, default: Constants.ACTIVE }, 
    lastUpdatedOn    : Date, 
    createdOn     : { type: Date, default: Date.now } 

} , { collection: 'SERVICE_SUB_TYPES' }); 

var ServiceType = new Schema({ 

    displayName   : String, 
    description   : String, 
    status    : { type: String, default: Constants.ACTIVE }, 
    lastUpdatedOn  : Date, 
    serviceSubTypeId : {type: Schema.Types.ObjectId, ref: 'ServiceSubType', index: true}, 
    createdBy   : { type: Schema.Types.ObjectId, ref: 'SystemUser', index: true }, 
    createdOn   : { type: Date, default: Date.now } 

} , { collection: 'SERVICE_TYPES' }); 

を以下のように2つのマングースのスキーマを持っている私は今、私がしようとしています

module.exports.addNewServiceType = function(serviceType_obj, callback) { 
    serviceType_obj.save(serviceType_obj,callback); 
} 

以下のようにタイプオブジェクトを埋めてきましたServiceSubTypeドキュメントを作成し、同時にServiceTの "serviceSubTypeId"に値を設定しようとするypeオブジェクトが作成されたServiceSubTypeを参照します。

これは同じ目的のコードです。

module.exports.addServiceSubType = function(serviceTypeObjId, serviceSubType_obj, callback) { 

    serviceSubType_obj.save(serviceSubType_obj, function (error, serviceSubType) { 

    }); 


    serviceSchema.ServiceType.findById(serviceTypeObjId, function (err, serviceType) { 

     var opts = { path: 'serviceSubTypeId'}; 

     serviceSchema.ServiceType.populate(serviceType, opts, function (err, user) { 
      console.log(serviceType); 
      }); 

    }).exec(callback); 

} 

ただし、既存のSubTypeオブジェクトには値が設定されていません。

私はこの技術では非常に新しいので、私のアプローチは非常に間違っていると認めます。期待どおりにこのコードを実行するためのあらゆる種類の助けを感謝します。

おかげ Ajoy

答えて

0

私はあなたのrefがオブジェクト

serviceSubTypeId : { 
    type: Schema.Types.ObjectId, 
    ref: 'SERVICE_SUB_TYPES', <==== your collection type goes here 
    index: true 
}, 

collectionと同じ設定されるべきだと思うマングースは、JavaScriptのオブジェクトタイプについては何も知りません。代わりに、提供する(または生成する)collectionという名前に基づいて物事を追跡します。

以下のコメントをもとに

更新は私がしばらく前に書いたいくつかのサンプルコードを持っている、と私はマングースが私のために、コレクション名を生成せてるように見えます。ただし、私のタイプをコレクションに登録するときには、mogoose.model()コールに名前を付けています。

たとえば、PostタイプとUserタイプがあります。投稿には、ユーザへの参照であるauthorが含まれています。それはこのようになります

:私はmongoose.modelメソッド呼び出しでは、ダウン以下「利用者」としての私のモデルを登録していますので、このサンプルコードで

// post 
// ---- 

var PostSchema = new mongoose.Schema({ 
    date: {type: Date, required: true, default: Date.now}, 
    title: {type: String, required: true}, 
    content: {type: String, required: true}, 
    author: { 
    type: SchemaTypes.ObjectId, 
    ref: "user" 
    }, 
    comments: [CommentSchema] 
}); 

var Post = mongoose.model("blog", PostSchema); 

// user 
// ---- 

var UserSchema = mongoose.Schema({ 
    firstName: {type: String}, 
    lastName: {type: String}, 
    username: {type: String, required: true, index: {unique: true}}, 
    email: {type: String, required: true}, 
    password: {type: String, required: true}, 
    url: { 
    type: mongoose.Schema.Types.ObjectId, 
    ref: "url" 
    } 
}); 

User = mongoose.model("user", UserSchema); 

、私は「ユーザー」にrefを設定しています。

mongoose.modelを使用してモデルを登録して名前を入力していますか?その場合は、その名前を使用します。

+0

私はそれを試みましたが、新しいMongooseError.MissingSchemaError(name)としてエラーが発生しています。 ^ MissingSchemaError: "SERVICE_SUB_TYPES"モデルにスキーマが登録されていません。 –

+0

私はいくつかの基本的な間違いをしているようです。 –

+0

私はいくつかのサンプルコードで私の答えを更新しました。うまくいけば助けてくれます。 –