Mongodb

GitbookBackend2020-12-29


🪕 mongod


  • 和 MySQL + Sequelize 一样,用 multer 上传文件。
  • Schema 定义和插入数据不一致:

    Schema 中定义了的 name 被修改成功,但是 school 字段添加不成功,这正是 mongoose 的优点,对于不符合 Schema 的字段的操作是不起作用的,但同时造成了一定的局限性。

    当我们想对 mongoose 数据进行不符合 schema 的修改又不想修改 schema 时,可以直接修改data._doc, 当然在你调用 data.save() 时, 这个数据中不合法的数据还是不会被保存到数据库。

  • mongoose 默认的集合名字是 model 的复数形式: Admin -> admins

    配置/etc/mongod.conf:

    # network interfaces
    net:
    port: 27017
    bindIp: 0.0.0.0 # Listen to local interface only, comment to listen on all interfaces.

    如果不設置成 0.0.0.0,則 yarn start 連接的時候有問題,報連接錯誤。而且 remote 的 robo-mongo 也連不上。

📑 mongodb 数据类型


  • Double
  • String,
  • Object
  • Array
  • ObjectId
  • Boolean
  • Date
  • Integer
  • Timestamp

📑 mongoose 数据类型


  • String
  • Number
  • Date
  • Boolean
  • ObjectId
  • Array
  • Map
  • Buffer

📑 mongoose findOne


let product;
try {
	production = await Model.findById(id);
} catch (error) {
	throw new NotFoundException("could not find");
}

if (!product) {
	throw new NotFoundException("could not find");
}

📑 lean and populate


Lean faster and less memory intensive, but the result documents are plain old JavaScript objects (POJOs), not mongoose.Document.

User.findOne({ email }, "+password", { lean: true }).populate();