我有两个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
答案 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注册模型并提供名称?如果是这样,请使用该名称。