美文网首页前端
mongoose中文文档

mongoose中文文档

作者: suporka | 来源:发表于2017-09-21 10:58 被阅读845次

    本人编译官方教程部分内容,括号中内容为个人见解,转载请注明出处,谢谢

    开始

    • 首先得确认你已经安装了 Mongodb 和 Node.js
    • 接着使用命令行工具 npm 安装 mongoose

    $ npm install mongoose

    • 现在我们想模糊 kittens 且记录每一个我们曾经在 mongoDB 中遇到的 kittens. 首先我们要做的是将 mongoose 导入我们的项目,并且建立一个与本地运行的 mongodb 数据库连接的 connect .
    // getting-started.js
    var mongoose = require('mongoose');
    mongoose.connect('mongodb://localhost/test');
    

    (在入口文件中引入mongoose)

    • 我们将有一个与运行在localhost的测试数据库的连接过程。那么我们现在需要得到一些关于连接成功或失败的消息。
    var db = mongoose.connection;
    db.on('error', console.error.bind(console, 'connection error:'));
    db.once('open', function (callback) {
      // yay!
    });
    
    • 一旦我们的连接打开,回调将会启用。为了方便起见,我们假定所有的代码都在此回调中。
      ◆◆◆
    • 在 mongoose 中,一切来自于 Schema(模式)。让我们参考一下并且定义我们的 kittens.
    var kittySchema = mongoose.Schema({
        name: String
    })
    
    • 到目前还好!我们已经获得了一个带有 string 类型的属性的 schema .下一步是将我们的 schema 转化成一个 model.
    var Kitten = mongoose.model('Kitten', kittySchema)
    
    • model 就是一个可以创建文件的类。在这个案列中,我们 schema 中每一个 document 都将成为一个带有多个属性和行为的kitten。接下来让我们创造一个kitten实例。
    var silence = new Kitten({ name: 'Silence' })
    console.log(silence.name) // 'Silence'
    

    我们看看如何增加一个 speak 功能到我们的 document 中去

    // NOTE: methods must be added to the schema before compiling it with mongoose.model()
    kittySchema.methods.speak = function () {
      var greeting = this.name
        ? "Meow name is " + this.name
        : "I don't have a name"
      console.log(greeting);
    }
    var Kitten = mongoose.model('Kitten', kittySchema)
    

    ◆◆◆
    (◆◆◆之间的内容应该写在一个model类型的js文件中)

    • function 增加了 schema 编译 model 原型的方法属性并且暴露每个 document 实例。
    var fluffy = new Kitten({ name: 'fluffy' });
    fluffy.speak() // "Meow name is fluffy"
    

    (这部分内容应于路由的回调中定义)

    • 我们到目前为止仍然没有保存任何东西到 Mongodb 中去。每个 document 可以通过调用其 save 方法保存到数据库中。如果没有任何东西产生,那么第一个 argument 的回调将会是一个 error。
    fluffy.save(function (err, fluffy) {
      if (err) return console.error(err);
      fluffy.speak();
    });
    
    • 随着时间的过去,我们想展示我们曾经见过的所有 kittens ,通过Kitten model 便可以进入到所有的 kitten 中去。
    Kitten.find(function (err, kittens) {
      if (err) return console.error(err);
      console.log(kittens)
    })
    
    • 我们刚刚只是在控制台上打印了所有 kitten .如果想要过滤一些 kittens 的名字, mongoose 支持 mongodbs 丰富的查询语法
      Kitten.find({ name: /^Fluff/ }, callback)
    • 这里展示对所有 document 的一个 name 属性的搜索并且返回相关的结果到回调中去。
      Congratulations
      到这里我们的 quick start 就结束了。我们创建了一个 schema ,增加了个人的 document 方法,并且使用 mongoose 保存查询了在 mongodb 中的 kittens .前往guide 和api 文档了解更多!

    Schemas

    • 如何你还没有开始项目,请花一分钟的时间阅读上文的‘开始’以便对 mongoose 如何工作有一个大概的了解。如果2.x迁移到3.x,请花点时间阅读一下 迁移指导
    定义你的 schema
    • mongoose 的开始源于一个 Schema. 每一个 schema 连接到 Mongodb 并且定义其
      documents 模型
    var mongoose = require('mongoose');
    var Schema = mongoose.Schema;
    var blogSchema = new Schema({
      title:  String,
      author: String,
      body:   String,
      comments: [{ body: String, date: Date }],
      date: { type: Date, default: Date.now },
      hidden: Boolean,
      meta: {
        votes: Number,
        favs:  Number
      }
    });
    

    如果你之后想增加额外的 keys ,请使用 schema#add 方法

    我们 blogSchema 中的每个 key 在 document 中定义了一个转化为与其相关的 SchemaType 的方法。例如。我们定义了一个被转化为字符串 SchemaType 的‘title’以及一个被转化为 Data SchemaType 的 'date'。keys 也可以为包含更多内部key的对象,如例子中的 meta 。

    SchemaTypes 有:

    • String
    • Number
    • Date
    • Buffer
    • Boolean
    • Mixed
    • ObjectId
    • Array
      Schemas 不仅定义了你 document 的结构和属性,而且定义了 document 的实例方法,静态 model 方法,复合索引以及被称为中间件的生命周期钩子函数。
    创建一个 model

    在使用schema 之前,我们需要将 blogSchema 转化成一个我们可以操作的 model,我们通过 mongoose.model(modelName, schema)转化它

    var Blog = mongoose.model('Blog', blogSchema);
    // ready to go!
    
    实例方法

    相关文章

      网友评论

        本文标题:mongoose中文文档

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