zoukankan      html  css  js  c++  java
  • Mongodb 数据类型及Mongoose常用CURD

    前言

          看完了Node.js实战,其中在数据存储部分提到了Redis、Mongodb,我自己也根据书中的介绍写了几个简单的demo,在demo的过程首先遇到的问题就是数据类型和常见的CURD写法。 mongodb的常见操作有两种方式,一个是直接使用API,也就相当于你在SQL Server客户端中使用T-SQL编写SQL语句来操作数据一样,其次就是在程序中使用mongoose驱动来操作数据,相当于我们在程序里用ADO.NET或EF来操作数据,如果你已经写了几个调用API的demo,那么我建议再回过头来看看mongoose的API,多看API,并且记住常见的几个方法比如where,skip,sort等

         按照以往我们编写Web方式,我们会关注数据从客户端(Views)如果到Controller层, 然后把数据如何从Controller层传递到Dao层以及这两个层面传递数据时的一些技巧,那么在Node里这种思维也是适用的。

    Mongodb数据类型

        1、null。{"x":null}。

        2、Boolean。{"x":true} 、{"x":false}。

        3、数据类型。在Mongodb Shell中默认使用64位浮点型数据,如{"x":2.32}、{"x":2},如果要使用整数类型则用{"x":NumberInt(2)}、{"x":NumberLong(2)}。

        4、字符串。Mongodb中字符串采用UTF-8编码方式,{"x":"hello world"}。

        5、日期类型。{"x":new Date()}。

        6、正则表达式。 Mongodb中可使用和javascript相同的正则表达式 {"x":/itbilu/i}。

        7、数据。Mongodb中数组的使用和javascript相同{"x":["hello","world"]}。

        8、内嵌文档。{"x":{"y":"Hello"}}。

        9、Id和ObjectId()。Mongodb每个文档都会包含一个_id,如果你不指定时Mongodb会自动生成一个ObjectId对象。

        10、代码。{"x":function aa(){}}。

        11、二进制。

    常见CURD

    var mongoose=require('mongoose');
    var Schema=mongoose.Schema;
    
    //1、连接字符串
    mongoose.connect('mongodb://localhost/test');
    
    //2、定义你的数据模型(也就是我们在关系数据库中定义的Table)
    var TodoSchema=new Schema({
    	title:String,
    	finished:{type:Boolean,default:false},
    	post_date:{type:Date,default:Date.now}
    });
    
    //3、访问todo对象模型
    mongoose.model('Todo',TodoSchema);
    
    
    //添加
    exports.add=function(title,callback){
    	var newTodo=new Todo();
    	newTodo.title=title;
    	newTodo.save(function(err){
    		if(err){
    			console.log(err);
    			callback(err);
    		}else{
    			callback(null);
    		}
    	});
    }
    
    //查找单独的数据
    var findTodoById=exports.findTodoById=function(id,callback){
    	Todo.findOne({_id:id},function(err,doc){
    		//doc也就是根据id得到的记录值
    		if(err){
    			callback(err,null);
    		}
    		callback(null,doc);
    	})
    }
    
    //删除
    exports.delete=function(id,callback){
    	exports.findTodoById(id,function(err,doc){
    		if(err){
    			callback(err);
    		}else{
    			doc.remove();
    			callback(null);
    		}
    	})
    }
    
    //编辑标题
    exports.editTitle=function(id,title,callback){
    	exports.findTodoById(id,function(err,doc){
    		if(err){
    			callback(err);
    		}else{
    			doc.post_date=new Date();
    			doc.title=title;
    			doc.save(function(err){
    				if(err){
    					callback(err);
    				}else{
    					callback(null);
    				}
    			})
    		}
    	})
    }
    
    exports.allTodos=function(callback){
    	Todo.find({},callback);
    }
    
    //分页查询
    exports.TodoPageList=function(pageIndex,pageSize,callback){
    	var m=Todo.find({}); //也有方法直接这样写: var m=this;
    	var start=(pageIndex-1)*pageSize;
    	m.skip(start);
    	m.limit(pageSize);
    	m.sort({'post_date','asc'}); //排序
        //根据关键字查询后分页
        //m.where('title','XXX');
    
        //执行分页查询
        m.exec(function(err,rs){
        	//分页后的结果
        	if(err){
        		callback(err);
        	}else{
        		Todo.find(function(err,result){
        			/*
        				一般情况下的分页你需要同时返回数据库记录总数和分页后的数据,所以这里使用了Todo.find再查询一次
        			*/
        			callback({rows:rs,total:result.length});
        		});
        	}
        })
    
    }
    

      

    参考地址

       http://www.nodeclass.com/api/mongoose.html#query-js

       http://itbilu.com/database/mongo/E1MxCQfS.html#objectId

       http://www.cnblogs.com/flyoung2008/archive/2012/07/22/2603791.html

  • 相关阅读:
    React元素渲染
    初识JSX
    微信小程序复制文本到剪切板
    微信小程序报错request:fail url not in domain list
    小程序,通过自定义编译条件,模拟推荐人功能
    积分抵扣逻辑
    微信小程序 switch 样式
    tomcat 配置开启 APR 模式
    tomcat8 传输json 报错 Invalid character found in the request target. The valid characters are defined in RFC 3986
    c++数组初始化误区
  • 原文地址:https://www.cnblogs.com/sword-successful/p/5098327.html
Copyright © 2011-2022 走看看