For*_*ine 6 mongoose mongodb mongoose-schema
我目前正在使用 mongoose v.5.25,而不是 mongoDB v.3.6。
我的应用程序应该从许多不同的视图查询数据,例如,我当前在数据库中拥有的一个视图:db.joboffers_view.find()
将返回从不同集合聚合的许多记录。
对于普通的集合模型,我像这样查询它:
const model = db.model(attribute);
/*where attribute, can be any registered schema */
model.find().
then((result) => {
resolve(result);
}).
catch((err) => {
reject(err);
});
Run Code Online (Sandbox Code Playgroud)
然后我注册模型的方式是这样的(简化代码):
//...
//abstracting boring connection methods
const db = mongoose.connection
//...
//simple model schema
const users_schema = {
_id: ObjectId,
another_field: String
};
//here I'm registering a schema for a VIEW, instead of normal collection
const view_schema = {
_id: ObjectId,
another_field: String
};
//...
//then
db.model('users', users_schema);
db.model('view', view_schema);
Run Code Online (Sandbox Code Playgroud)
当我从任何注册模型运行查询时,我得到的结果很好。但是,当我针对代表 mongo 数据库视图的模型运行它时,它返回一个空数组。
没有错误,什么也没有,只是一个空数组。
我浏览了猫鼬文档,没有找到任何特定的方法或模式来查询视图,而不是查询集合数据。
这似乎与我对系统中任何其他集合所做的方式相同。
我错过了什么吗?
小智 6
我也遇到了同样的问题,并发现问题是猫鼬默认情况下通过复数模型/视图名称来读取集合名称。
因此,当您创建任何视图并希望在 mongoose 中使用它时,要么确保您的视图名称是复数(在视图名称末尾添加 s),要么在初始化 schema 时传递集合名称。
const users_schema = {
_id: ObjectId,
another_field: String
};
mongoose.model('vw_user_info', users_schema, 'vw_user_info');
Run Code Online (Sandbox Code Playgroud)
小智 0
我有同样的问题,但我解决了它,请检查 mongodb 中视图的名称,它必须与db.model('view_name', view_schema);
您可以通过这样的配置打开 Mongoose 调试mongoose.set('debug', true);
| 归档时间: |
|
| 查看次数: |
7598 次 |
| 最近记录: |