我有两个 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' });
我已填充类型对象如下
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);
}
但它不起作用,并且没有填充现有子类型对象中的任何值。
我承认我的方法可能是非常错误的,因为我对这项技术还很陌生。感谢任何类型的帮助来按预期运行这段代码。
谢谢 欢乐
最佳答案
我认为您的ref
应该与对象上的collection
设置相同
serviceSubTypeId : {
type: Schema.Types.ObjectId,
ref: 'SERVICE_SUB_TYPES', <==== your collection type goes here
index: true
},
Mongoose 对 JavaScript 对象类型一无所知。相反,它根据您提供(或它生成)的集合
名称来跟踪事物。
根据以下评论进行更新
我有一些我不久前编写的示例代码,看起来我让 Mongoose 为我生成集合名称。但是,在为集合注册我的类型时,我向 mogoose.model()
调用提供了一个名称。
例如,我有一个 Post
类型和一个 User
类型。该帖子包含一个作者
,它是对用户的引用。
看起来像这样:
// 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
设置为“user”,因为我在下面的 mongoose.model
方法调用中将我的模型注册为“user”。
您是否使用 mongoose.model 注册模型并提供名称?如果是这样,请使用该名称。
关于node.js - Mongoose Populate Method 不填充值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36185713/