猫鼬查询视图

时间:2018-07-26 18:00:15

标签: mongodb mongoose 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);
       });

然后我注册模型的方式如下(简化代码):

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

当我从任何已注册的模型运行查询时,得到的结果都很好。但是,当我对代表mongo数据库视图的模型运行它时,它将返回一个空数组。

没有错误,什么也没有,只有一个空数组。

我浏览了猫鼬文档,但没有找到用于查询视图的任何特定方法或模式,而没有收集数据。

对于我系统中的任何其他集合,这似乎都是相同的方式。

我想念什么吗?

3 个答案:

答案 0 :(得分:1)

我也面临着同样的问题,并且发现该问题默认是猫鼬,通过将模型/视图名称进行复数来读取任何集合名称。

因此,当您创建任何视图并要在猫鼬中使用时,请确保您的视图名称应为复数形式(在视图名称末尾添加s),或者在初始化时通过集合名称架构

示例

const users_schema = {
   _id: ObjectId,
   another_field: String
};
mongoose.model('vw_user_info', users_schema, 'vw_user_info');

答案 1 :(得分:0)

我有同样的问题,但是我解决了,请检查mongodb中视图的名称,它必须与db.model('view_name', view_schema);相同

您可以像这样mongoose.set('debug', true);

通过配置打开Mongoose调试

答案 2 :(得分:0)

添加第三个参数

db.model('view', view_schema, 'view_name_in_db')