如何从集合名称加载mongoose架构

pepwfjgg  于 2022-11-13  发布在  Go
关注(0)|答案(2)|浏览(115)

理想情况下,要在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".斗争,我不想在不同的微服务之间复制重复的模式文件。

20jt8wwn

20jt8wwn1#

要从已注册的Mongoose模型中获取模式,您需要专门访问模式:

const AuthorSchema = require('mongoose').model('Author').schema;
nle07wnf

nle07wnf2#

在我连接到数据库之后,是否有一种方法可以从作者集合名称自动解码AuthorSchema?
否-架构保存在代码级别,而不是数据库级别。无法仅通过连接到数据库来了解架构。

相关问题