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
Mongodb 数据类型及Mongoose常用CURD的更多相关文章
- redis基础:redis下载安装与配置,redis数据类型使用,redis常用指令,jedis使用,RDB和AOF持久化
知识点梳理 课堂讲义 课程计划 1. REDIS 入 门 (了解) (操作) 2. 数据类型 (重点) (操作) (理解) 3. 常用指令 (操作) 4. Jedis (重点) (操作) ...
- MongoDB在Linux下常用优化设置
MongoDB在Linux下常用优化设置 以下是一些MongoDB推荐的常用优化设置.在生产环境下选取合适的参数值,例如预读值和默认文件描述符数目等,会对系统性能有很大的影响. 1.关闭数据库文件的 ...
- java 操作mongodb查询条件的常用设置
java操作mongodb进行查询,常用筛选条件的设置如下: 条件列表:BasicDBList condList = new BasicDBList(); 临时条件对象:BasicDBObject c ...
- MongoDB数据类型查询与修改
MongoDB数据类型和对应的代码如下: MongoDB可以根据字段类型进行文档查询: 可以看到,friend集合的文档中,age字段有32位int类型的,也有double类型的.如果需要把doubl ...
- YII 1.0 常用CURD写法
<?php //yii1.0 curd简单写法 //查询 Yii::app()->db->createCommand($sql)->queryAll();//查询所有行数据 ...
- MongoDB 数据类型
MongoDB支持许多数据类型的列表下面给出: String : 这是最常用的数据类型来存储数据.在MongoDB中的字符串必须是有效的UTF-8. Integer : 这种类型是用来存储一个数值.整 ...
- MongoDB (七) MongoDB 数据类型
MongoDB支持许多数据类型的列表下面给出: String : 这是最常用的数据类型来存储数据.在MongoDB中的字符串必须是有效的UTF-8. Integer : 这种类型是用来存储一个数值.整 ...
- MongoDB 安装详细教程 + 常用命令 + 与 Python 的交互
MongoDB 简介 MongoDB (名称来自 humongous/巨大无比的, 是一个可扩展的高性能,开源,模式自由,面向文档的NoSQL,基于 分布式 文件存储,由 C++ 语言编写,设计之初旨 ...
- MongoDB学习之mongoose
MongoDB介绍: MongoDB是基于Javascript语言的数据库,存储格式是JSON,而Node也是基于JavaScript的环境(库),所以node和mongoDB的搭配能减少因为数据转换 ...
随机推荐
- 同一个页面多个page之间的切换
今天接触了JQ Mobile以下是本小白的理解(不怕大家笑话): 创建移动 web 应用程序的框架:适用于所有流行的智能手机和平板电脑: 将“写得更少.做得更多”这一理念提升到了新的层次:它会自动为网 ...
- PHP 文件处理
$handler = fopen('./abc.html', 'w'); if(!feof($handler)){ // 读取文件末尾,也可以用file_exists mkdir('./abc.htm ...
- 关于HTML是什么,能做什么
HTML(Hyper Text Mark-up Language )即超文本标记语言,是 WWW 的描述语言,由 Tim Berners-lee提出.设计 HTML 语言的目的是为了能把存放在一台电脑 ...
- 学习笔记: Delphi之线程类TThread
新的公司接手的第一份工作就是一个多线程计算的小系统.也幸亏最近对线程有了一些学习,这次一接手就起到了作用.但是在实际的开发过程中还是发现了许多的问题,比如挂起与终止的概念都没有弄明白,导致浪费许多的时 ...
- C#动态编译引擎-CS-Script
什么是CS-Script? CS-Script是一种以CLR(公共语言运行库)为基础的脚本系统,它使用ECMA标准的C#作为编程语言,它面向微软的CLR运行库(.net 2.0/3.0/3.5/4.0 ...
- TaintDroid剖析之IPC级污点传播
TaintDroid剖析之IPC级污点传播 作者:简行.走位@阿里聚安全 前言 在前三篇文章中我们详细分析了TaintDroid对DVM栈帧的修改,以及它是如何在修改之后的栈帧中实现DVM变量级污点跟 ...
- Expert 诊断优化系列------------------语句调优三板斧
前面三篇通过CPU.内存.磁盘三巨头,讲述了如何透过现在看本质,怎样定位服务器三巨头反映出的问题.为了方便阅读给出链接: SQL SERVER全面优化-------Expert for SQL Ser ...
- [.net 面向对象程序设计进阶] (24) 团队开发利器(三)使用SVN多分支并行开发(下)
[.net 面向对象程序设计进阶] (24) 团队开发利器(三)使用SVN多分支并行开发(下) 本篇导读: 接上篇继续介绍SVN的高级功能,即使用分支并行开发.随着需求的不断变更,新功能的增加.特别是 ...
- 如何在没有域的环境中搭建AlwaysOn(一)
对DBA而言,不需要域就可以搭建SQL Server AlwaysOn是Windows Server 2016中最令人兴奋的功能了,它不仅可以降低搭建的成本,而且还减少了部署和运维的工作量. 该特性可 ...
- CVTE实习求职经历
今天,听到有好多同学最近要去面试CVTE这家企业,于是呢,准备将自己的经历写上来,给大家一个参考,希望能够大家一次帮助. 一.整体感觉 首先呢,先讲一下我个人对这家企业的整体感觉吧. 1. 第一次 对 ...