使用mongoose管理数据库

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管理数据库)