Mongoose弹射起步

弹射起步系列主要是讲解某些知识浅显的快速入门

简介

如果你看到这篇文章的话,说明你一定是正在寻找Node操作Mongodb的快速入门

那么废话不多说直入正文(本文大部分内容翻译自Mongoose官方文档,所以沿袭官方文档以一个blog作为例子)

安装

首先你需要有一台完整的安装了Node.jsnpm的电脑

然后npm install mongoose

完成安装

基础知识
连接

首先你需要连接到本地服务器的Mongo数据库才能进行接下来的操作,如下

var mongoose = require('mongoose');  
mongoose.connect('mongodb://localhost/test');  
//由于是弹射起步,所以先简单粗暴的不加安全验证如此链接吧

一般情况下你需要创建一个Model来保存你即将存取的数据的结构,如下

var cat_shema = new mongoose.Schema({  
  name: String,
  friends: [String],
  age: Number,
}); 
//定义cat的Shema
var Cat = mongoose.model('Cat',cat_shema);  
//将该Schema发布为Model

这里规定了Model的名称为Cat,那么对应的collection就是cats,并且规定了一些数据结构(一目了然)

增删改查

新增 创建一个kitty对象来赋值

var Cat = mongoose.model('Cat');  
var kitty = new Cat({ name: 'Zildjian', friends: ['tom', 'jerry']});  
kitty.age = 3;  

接下来调用save即可保存

kitty.save(function (err) {  
 console.log('save status:',err ? 'Angry!' : '吼啊!');
});

查询

var Cat = mongoose.model('Cat');  
//find参数:
//1.<Object>mongodb selector
//2.<Function>err:错误信息,results:查询结果
Cat.find({}, function (err,results) {  
        if(err){
            console.log('error message',err);
            return;
        }
        console.log('results',results);
    });
//此处是不包含条件的基础查询

条件or查询

var Cat = mongoose.model('Cat');  
var condition ={  
    $or: [
        {name: '华莱士'},
        {name: '麦克'}
    ]
};
Cat.find(condition, function (err, results) {  
    if(err){
        console.log('condition error',err);
        return;
    }
    console.log(results);
});

这时返回值为

[{name: '华莱士', friends: ['蛤', '董先森']}]

我们可以看出此处的查询语句为

 $or: [
        {name: '华莱士'},
        {name: '麦克'}
    ]

可以看出mongoose所使用的查询语句和mongoDb官方的查询语句很相似,此处可以套用

更改 在我们或的查询结果后

var Cat = mongoose.model('Cat');  
var condition ={  
    $or: [
        {name: '蛤蛤'}
    ]
};

Cat.findOne(condition, function (err, result) {  
    if(err){
        console.log('condition error',err);
        return;
    }
//如果没有发生错误的话,此处会获得查询结果result
//我们将其参数改变
result.name = "江主席"  
//然后保存
result.save(function(err){  
    if(err){console.log(err)}
  })
});
//即可完成更新

删除

使用remove()方法即可删除查询结果

李鹏飞

一个充满好奇心的产品美少年,一心扑在ZeroNet上

北京 海淀区