使用mongoose管理数据库

作者: 北京大数据苏焕之 | 来源:发表于2018-03-01 14:06 被阅读53次

    node.js有针对MongoDB的数据库驱动:MongoDB。你可以使用“cnpm install mongodb”
    不过直接使用MongoDB模块虽然大而灵活,但有些繁琐,在下就是mongoose
    如果你对原始驱动某块感兴趣可以去https://docs.mongodb.org/getting-started/node/client/

    mongoose构建MongoDB之上,提供了schema,mode和document对象,用起来比较方便

    我们可以用schema对象定义文档的结构(类似表的结构),也可以定义字段和类型,唯一性,索引和验证
    model对象表示集合中的所有文档。。document对象作为集合中的单个文档表示mongoose
    还有query和aggregate对象,query实现查询,aggregate实现聚合。

    关于这些信息,你们可以去http://mongoosejs.com/docs/guide.html。查看

    安装mongoose
    1.使用express准备一个testmongodb的项目,命令序列如下
    express TestMongoDB
    cd TestMongoDB
    cnpm install
    执行完了上面的命令后,使用下面的命令安装mongoose
    cnpm install mongoose --save
    这个命令安装mongoose并将其作为项目的依赖,而mongoose依赖mongoDB driver
    以及regexp等等模块也会被自动安装

    为了理解用的API 看这里地 文档:http://mongoosejs.com/docs/api.html。
    
    使用mongoose可以新建数据库,新建集合,对集合内的文档进行CRUD操作,在写代码可以对照着
    mongo shell 验证结果是否符合预期
    2.在TestMongoDB下新建一个mongo.js 内容如下
    我们使用atom工具打开创建的TestMongoDB在atom中进行操作
    
    var mongoose = require('mongoose');
    

    mongoose.connect('mongodb://localhost/accounts');
    var db = mongoose.connection;
    db.on('error', console.error.bind(console, 'connection error:'));
    db.once('open', function() {
    console.log('mongoose opened!');
    var userSchema = new mongoose.Schema({
    name:{type: String, unique: true},
    password:String
    },
    {collection: "accounts"}
    );
    var User = mongoose.model('accounts', userSchema);

    User.findOne({name:"WangEr"}, function(err, doc){
    if(err) console.log(err);
    else console.log(doc.name + ", password - " + doc.password);
    });

    var lisi = new User({name:"LiSi", password:"123456"});
    lisi.save(function(err, doc){
    if(err)console.log(err);
    else console.log(doc.name + ' saved');
    });
    });

    上面的文件执行“node mongo.js”
    

    要使用mongoose,先require,然后使用connect方法连接数据库。connect原型:

    connect(uri, options, [callback])
    1
    2
    uri的格式类似:“mongodb://user:pass@localhost:port/database”。

    mongoose的connection对象定义了一些事件,比如connected、open、close、error等,我们可以监听这些事件。

    在我们的示例代码里,我监听了open事件,在回调函数中,定义了Schema,调用mongoose.model来编译Schema得到Model对象。需要注意的是,定义Schema时指定的collection名字与mongoose.model的第一参数要保持一致。

    拿到了Model对象,就可以执行增删改查等操作了。Model对象有find()、findOne()、update()、remove()等方法,和我们在mongo shell里的用法类似。这些方法都有一个可选的callback,当你提供这些callback时,执行的结果会通过这个callback返回给你。如果你不提供,这些方法会返回一个Query对象,你可以再通过Query组装新的选项,然后调用Query的exec(callback)来提交查询。

    我在代码里查找WangEr的档案时用了callback,没用Query。

    Model对象有个Model(doc)方法,用来构造一个文档(Document)。创建Lisi的文档时就是这种Document对象的save()方法可以将文档保存到数据库。

    相关文章

      网友评论

        本文标题:使用mongoose管理数据库

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