2016-03-23 2 views
1

У меня есть два мангуста схемы следующим образомMongoose Populate Метод не заселять значение

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' }); 

Я заселена тип объекта, как показано ниже

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

Теперь я пытаюсь для заполнения документа ServiceSubType, а затем в то же время пытается заполнить «serviceSubTypeId» ServiceT объект 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 должен быть тот же параметр, как collection на объекте

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

Mongoose ничего не знает о ваших типах объектов JavaScript не знаю. Вместо этого он отслеживает вещи, основанные на указанном вами collection имени (или его создании).

обновление на основе комментариев ниже

У меня есть пример кода, который я написал некоторое время назад, и, похоже, я позволяю Mongoose генерировать имя коллекции для меня. Тем не менее, я заказываю имя для вызова mogoose.model() при регистрации моего типа для коллекции.

Например, у меня есть тип Post и тип User. Сообщение содержит author, который является ссылкой на пользователя.

Это выглядит следующим образом:

// 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.

Вы регистрируете свои модели, используя mongoose.model и предоставляя имя? если да, используйте это имя.

+0

Я пробовал его .. но он дает ошибку, как новый MongooseError.MissingSchemaError (name); ^ MissingSchemaError: схема не была зарегистрирована для модели "SERVICE_SUB_TYPES". –

+0

Мне кажется, что я делаю фундаментальную ошибку. –

+0

Я обновил свой ответ с помощью некоторого примера кода, который я написал некоторое время назад. надеюсь, это поможет. –

Смежные вопросы