【问题标题】:Mongoose Querying ViewsMongoose 查询视图
【发布时间】:2019-01-03 19:28:34
【问题描述】:

我目前正在使用 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 数据库上的视图的模型运行它时,它会返回一个空数组。

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

我查看了 mongoose 文档,但没有找到任何用于查询视图而不是集合数据的特定方法或模式。

这似乎与我对系统中的任何其他集合所做的方式相同。

我错过了什么吗?

【问题讨论】:

    标签: mongodb mongoose mongoose-schema


    【解决方案1】:

    我也遇到了同样的问题,发现问题是猫鼬默认情况下通过复数模型/视图名称来读取集合名称。

    因此,当您创建任何视图并希望在 mongoose 中使用它时,请确保您的视图名称是复数(在视图名称末尾添加 s)传递集合名称初始化架构

    示例

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

    【讨论】:

      【解决方案2】:

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

      你可以像mongoose.set('debug', true);这样配置打开Mongoose调试

      【讨论】:

        【解决方案3】:

        添加第三个参数

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

        【讨论】:

          猜你喜欢
          • 2022-06-15
          • 1970-01-01
          • 1970-01-01
          • 2014-12-27
          • 2014-10-10
          • 1970-01-01
          • 1970-01-01
          • 2020-03-05
          • 2022-01-10
          相关资源
          最近更新 更多