Mongoose Populate Method没有填充值

时间:2016-03-23 18:13:35

标签: node.js mongoose mongoose-populate

我有两个mongoose架构,如下所示

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

我已填充Type Object,如下所示

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

现在我尝试填充ServiceSubType文档,然后尝试填充引用ServiceSubType创建的ServiceType对象的“serviceSubTypeId”。

这是我的一段代码用于同一目的。

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

}

但它不是workign,也不填充Existing SubType对象中的任何值。

我承认我的方法可能非常错误,因为我对这项技术很陌生。感谢任何类型的帮助来按预期运行这段代码。

由于 Ajoy

1 个答案:

答案 0 :(得分: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设置为&#34; user&#34;因为我正在将我的模型注册为&#34; user&#34;在mongoose.model方法调用中,在下方。

您是否使用mongoose.model注册模型并提供名称?如果是这样,请使用该名称。