理想情况下,要在mongoose中进行查询时填充,需要将被填充的模式和调用模式导入到同一个repo下的同一个文件中。
现在,我有一个场景,其中一个名为AuthorSchema
的模式是由另一个存储库中的另一个内部微服务创建的,该存储库指向与我自己的服务相同的数据库,我希望在查询期间填充它。
在连接到数据库后,是否有方法自动从author
集合名称解码AuthorSchema
?
例如:
let posts = await Post.find({})
.populate("author", 'first_name last_name _id').limit(10)
我已经在自己的服务中创建了postSchema
,但是authorSchema
是由另一个名为author-management-microservice
的存储库中的另一个微服务创建的,因此我无法访问该模式。
我想要的是这样的东西:
let AuthorSchema = mongoose.connection.decodeSchemaFromCollectionName('author');
这样我就可以将我的查询修改为
let posts = await Post.find({})
.populate({path:"author", model:AuthorSchema, select:'first_name last_name _id'}).limit(10)
我想要这样的东西的原因是,每当我试图填充author
时,我一直在与MissingSchemaError: Schema hasn't been registered for model "Author".
斗争,我不想在不同的微服务之间复制重复的模式文件。
2条答案
按热度按时间20jt8wwn1#
要从已注册的Mongoose模型中获取模式,您需要专门访问模式:
nle07wnf2#
在我连接到数据库之后,是否有一种方法可以从作者集合名称自动解码AuthorSchema?
否-架构保存在代码级别,而不是数据库级别。无法仅通过连接到数据库来了解架构。