美文网首页
Mongoose基础入门

Mongoose基础入门

作者: 梦安web开发 | 来源:发表于2020-03-29 20:32 被阅读0次

    Mongoose介绍

    Mongoose是MongoDB的一个对象模型工具,底层使用Mongodb的驱动,提供一套操作MongoDB数据库的接口。

    安装

    $ npm install mongoose
    

    使用mongoose连接数据库

    连接数据库MongoDB,会使用到mongoose.connect()方法。

    • mongoose.connect(url, options)
    mongoose.connect('mongodb://username:password@host:port/database?options...');
    
    • username:数据库的账号
    • password:数据库的密码
    • host: 数据库主机的地址 (一般为127.0.0.1)
    • post:端口 (27017)
    • database:连接的数据库

    实例:

    const mongoose = require("mongoose");
    
    //由于数据库没设置账号密码,这里省略账号密码  MongoDB的端口号为27017
    const url = 'mongodb://127.0.0.1:27017/admin';  
    //mongoose.connect 方法来链接 返回的是promise对象
    mongoose
    //connect参数2是个对象 为可选参数 当出现useNewUrlParser警告时 再来设置
      .connect(url, { useNewUrlParser: true })  
      .then(() => {
        console.log("数据库链接成功");
      })
      .catch(err => {
        console.log("数据库链接失败", err.message);
      });
    
    • connect() 函数接受回调函数,或返回一个 [promise]
    mongoose.connect(uri, options, function(error) {
      // Check error in initial connection. There is no 2nd param to the callback.
    });
    
    // Or using promises
    mongoose.connect(uri, options).then(
      () => { /** ready to use. The `mongoose.connect()` promise resolves to undefined. */ },
      err => { /** handle initial connection error */ }
    );
    

    数据库增删查改

    Mongoose 的一切始于 Schema。每个 schema 都会映射到一个 MongoDB collection ,并定义这个collection里的文档的构成。

    • 实例Schema
    var SingerSchema =mongoose.Schema({
         name : String,
         age : Number
    })
    

    document 里每个属性的类型都会被转换为 在 SingerSchema 里定义对应的 SchemaType。

    允许使用的 SchemaTypes 有:

    • String
    • Number
    • Date
    • Buffer
    • Boolean
    • Mixed
    • ObjectId
    • Array
    • 创建一个 model
      mongoose.model()
    var SingerSchema =mongoose.Schema({
         name : String,
         age : Number
    })
    var Singer=mongoose.model("Singer",SingerSchema)
    

    第一个参数是跟 model 对应的集合( collection )名字的 单数 形式。 Mongoose 会自动找到名称是 model 名字 复数 形式的 collection。 对于上例,对的是数据库的集合的singers。

    • 如果想要实现对单数的集合操作,可以修改为
    var SingerSchema =mongoose.Schema({
         name : String,
         age : Number
    })
    //第三个参数要与集合名一致大小写
    var Singer=mongoose.model("Singer",SingerSchema,singer)  
    
    • 实现对数据的查询
      使用的model 的 find静态方法进行数据的查询
    Singer.find({},function(err,doc){
        if(err){
            console.log("抛出"+err)
        }
        console.log(doc)
    })
    

    另外也可以使用findById, findOne, 和 where 这些静态方法,进行查询。

    • 实现对数据的增加
      使用的model 的 create静态方法进行数据的查询
    Singer.create({name:"张三",age:"12"},function(err,doc){
        if(err){
            console.log("抛出"+err)
        }
        console.log("成功")
    })
    
    • 实现对数据的删除
      使用的model 的 remove静态方法进行数据的查询
    Singer.remove({name:"张三",age:"12"},function(err,doc){
        if(err){
            console.log("抛出"+err)
        }
        console.log("成功")
    })
    
    • 实现对数据的更新
      使用的model 的 update静态方法进行数据的查询
    Singer.update({name:"张总"},{age:"333355553"},{ multi: true },function(err,doc){
        if(err){
            console.log("抛出"+err)
        }
        console.log("成功")
    })
    
    

    有效选项:

    • safe (布尔值)安全模式(默认为在架构(true)中设置的值)

    • upsert (布尔值)是否创建不匹配的文档(默认false)

    • multi (布尔值)是否应更新多个文档(默认false)

    • runValidators:如果为true,则对此命令运行更新验证程序。更新验证器根据模型的架构验证更新操作。

    • setDefaultsOnInsert:如果upsert为true,则在创建新文档时,猫鼬将应用模型模式中指定的默认值。此选项仅在MongoDB> = 2.4上有效,因为它依赖于MongoDB的$setOnInsertoperator

    • strict(布尔值)会覆盖strict此更新的选项

    • overwrite (布尔值)禁用仅更新模式,从而允许您覆盖文档(false)update在发送所有值之前,所有值都将强制转换为其相应的SchemaType。该callback函数接收(err, rawResponse)

    • err 是错误(如果发生)

    • rawResponse 是Mongo的完整回应

    相关文章

      网友评论

          本文标题:Mongoose基础入门

          本文链接:https://www.haomeiwen.com/subject/tamyuhtx.html