Mongoose 查询视图

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);