eggjs / eggjs/egg

目前egg-mongoose对model的加载机制不能很好适配跨库关联查询

Open
#4,298 3 comments 1 reaction 0 assignees View on GitHub
Inactive
Dominant language
TypeScript
Stars
19k
Forks
1.8k
PR merge metrics
No merged PRs in 30d

Description

## 代码示例
```js
// app/model/testOpenDataSource.js

'use strict';

const mongoose = require('mongoose');

module.exports = app => {

const User = app.mongooseDB.get('app').models.crm_user;

const schema = new mongoose.Schema({

// 创建人
user: {
type: mongoose.SchemaTypes.ObjectId,
ref: User,
required: true,
},
value: { type: Number },

createTime: { type: Date, default: Date.now },
updateTime: { type: Date, default: Date.now },
}, {
usePushEach: true,
timestamps: { createdAt: 'createTime', updatedAt: 'updateTime' },
});

const conn = app.mongooseDB.get('card');

return conn.model('test_open_data_source', schema);
};

```

## 问题描述
我这边想做跨库的表关联查询,通过在model中设置ref实现关联关系,此时ref获取的是`app.mongooseDB.get('app').models.crm_user`的model对象,是可以获取到的。**此时上述语句没有问题的,且运行通过**。通过`await ctx.model.TestOpenDataSource.find().populate('user')`可成功展开显示另外一个数据库的user表的数据。

但是我真正想获取的是user表而不是crm_user,这个时候`app.mongooseDB.get('app').models`中还没有挂载user表进来。

我通过打断点发现`app.mongooseDB.get('app').models`的挂在顺序是按照首字母的顺序的,当前文件`testOpenDataSource.js`是t开头的,所以crm_user已挂载,但是user在t后面,还没有挂载进来。

总不能为了让user.js可以提前挂载把它改名成auser.js吧?

> mongoose跨库关联查询的官方介绍:https://mongoosejs.com/docs/populate.html#cross-db-populate

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.