zoukankan      html  css  js  c++  java
  • mongoose连接collections会自动加s的问题解决

    问题的出现

      最近在用到mongoose连接数据库时遇到了这样的问题,我在mongoodb上创建了一个collection为course,然后在配置完mongoose连接数据库后拿到的是一个空对象。

      连接数据库当前集合的代码如下。

    //设计用户的集合 --- 设计表
    const mongoose = require('../db');
    const Schema = mongoose.Schema;     //当前数据库相应的集合对象
    //设计用户表集合
    const userSchema = new Schema({
        name: { type: String},
        age: { type: Number},
        sex: { type: Number},
        city: { type: String},
        company: { type: String}
    })
    //无则创建数据库集合并且连接,有则连接,并且暴露出去
    mongoose.model('Course', userSchema);
    
    module.exports = mongoose.model('Course', userSchema);

    看一下控制台:

    PS D:jcclesson3practiceweek1day04> node .find.js
    (node:12032) DeprecationWarning: `open()` is deprecated in mongoose >= 4.11.0, use `openUri()` instead, or set the `useMongoClient` option if using `connect()` or `createConnection()`. See http://mongoosejs.com/docs/4.x/docs/connections.html#use-mongo-client
    数据库连接成功
    []

      可以看到,查询之后,返回的是一个空数组,但是我本身的course集合里是有数据的,于是去查了官方的api。

    问题的原因:

      当没有传入collection参数时,Mongoose会通过model name(就是第一个参数),调用utils.toCollectionName方法产生一个collection name,而这个方法会使name变成复数形式。如果你不想要这个过程,只要传入collection name参数或设置Schema中的collection name选项。
      现在就知道了问题在哪里了(说实话这个设计让人难以理解)。

    问题的解决:

      我们可以设置mongoose.model()的第三个参数,代码如下。

    module.exports = mongoose.model('Course', userSchema,'course');

      或者,可以给Schema传入第二个参数,如下。

    const userSchema = new Schema({
        name: { type: String},
        age: { type: Number},
        sex: { type: Number},
        city: { type: String},
        company: { type: String}
    },{
        collection: 'course'
    })

    这样就可以解决问题了。

  • 相关阅读:
    PE文件解析器的编写(二)——PE文件头的解析
    PE解析器的编写(一)——总体说明
    PE文件详解(九)
    PE文件详解(八)
    06_建造者模式
    05_模板方法模式
    04_抽象工厂模式
    03_简单工厂模式(静态工厂模式)
    02_工厂方法模式
    01_单例模式
  • 原文地址:https://www.cnblogs.com/mengshou/p/11688732.html
Copyright © 2011-2022 走看看