01.js

//引包
var mongoose = require('mongoose');
//创建一个数据库连接
mongoose.connect('mongodb://localhost/test'); //创建一个Cat类。 语法mongosse.model(模型名字,Schema);
//这里省略了一步,就是schema是通过new mongoose.schema({})创建的(类工厂)。
var cc = mongoose.model('Cat', { name: String , age : Number , sex : String });
//对象
var kitty = new cc({ name: "汤姆" , "sex" : "公猫"});
//var kitty1 = new cc({ a: "汤姆"}); 是不行的,因为schema定了。 kitty.save(function (err) {
console.log('meow');
}); //寻找汤姆猫,将它改为8岁。
cc.find({"name":"汤姆"},function(err,result){
console.log(result);//一条记录
var xiaomao = result[0]; //xiaomao这个变量是一个Cat的实例
xiaomao.age = 8;
xiaomao.save();
});

02.js

/**
* mongoose官网中,Guide是学习路线,API Doc是api接口。
索引不能重复,查找快
*/
var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/test'); var db = mongoose.connection;
db.once('open', function (callback) {
console.log("数据库成功打开");
}); //博客的结构(Schema是类的模版或者是一个创建类的工厂,他创建的类有这些属性)
var blogSchema = new mongoose.Schema({
title: String,
author: String,
body: String,
comments: [{ body: String, date: Date }],
date: { type: Date, default: Date.now },
hidden: Boolean,
meta: {
votes: Number,
favs: Number
}
});
//这个工厂创建的类还有这个方法(对象也有)
blogSchema.methods.showInfo = function(){
console.log(this.title);
}
//通过工厂创建一个有名类,类的名字是Blog,也可以是别的名字。
var bb = mongoose.model('Blog', blogSchema); var blog = new bb({//Blog类的对象
"title" : "博客测试",
"author" : "考拉"
}); //blog.save();
blog.showInfo();

03.js

mongoose.connect('mongodb://localhost/test');

var db = mongoose.connection;
db.once('open', function (callback) {
console.log("数据库成功打开");
}); //博客的结构(类工厂,工厂创建的类有这些属性)
var animalSchema = new mongoose.Schema({
"name" : String,
"type" : String
});
//工厂创建的类有这些方法(对象也有)
animalSchema.methods.zhaotonglei = function(callback){
this.model('Animal').find({"type":this.type},callback);
} //通过schema工厂创建一个有名的Animal类
var Animal = mongoose.model('Animal', animalSchema);
//creat是类的方法,创建对象。
Animal.create({"name":"汤姆","type":"猫"});
Animal.create({"name":"咪咪","type":"猫"});
Animal.create({"name":"小白","type":"狗"});
Animal.create({"name":"snoopy","type":"狗"}); Animal.findOne({"name":"小白"},function(err,result){
var dog = result;//result是Animal的实例
dog.zhaotonglei(function(err,result){
console.log(result);
});
});

04.js

/**
* Created by Danny on 2015/9/29 10:18.
*/
var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/test'); var db = mongoose.connection;
db.once('open', function (callback) {
console.log("数据库成功打开");
}); //博客的结构
var blogSchema = new mongoose.Schema({
title: String,
author: String,
body: String,
comments: [{ body: String, date: Date }]
}); //发表评论
blogSchema.methods.pinglun = function(obj,callback){
this.comments.push(obj);
this.save();
} var Blog = mongoose.model('Blog', blogSchema); //var blog = new Blog({
// "title" : "哈哈哈",
// "author" : "考拉",
// "body" : "哈哈哈哈"
//}); //寻找一个标题是哈哈哈的博客,然后发表评论
Blog.findOne({"title":"哈哈哈"},function(err,blog){
if(!blog){
return;
}
blog.pinglun({"body":"再来一个评论","date" : new Date()});
});

05.js

/**
* Created by Danny on 2015/9/29 10:18.
*/
var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/xuanke'); var db = mongoose.connection;
db.once('open', function (callback) {
console.log("数据库成功打开");
}); //学生工厂
var studentSchema = new mongoose.Schema({
"name" : String,
"age" : Number,
"sex" : String
});
//实例方法,涨一岁
studentSchema.methods.zhangyisui = function(){
this.age++;
this.save();//改变数据库,要save()
}
//学生类
var Student = mongoose.model("Student",studentSchema); //课程工厂
var kechengSchema = new mongoose.Schema({
"name" : String,
"info" : String,
"student" : [studentSchema]//课程表里面会有学生的全部json,不是外键
});
//添加学生
kechengSchema.methods.tianjiaxuesheng = function(studentObj,callback){
this.student.push(studentObj);
this.save(function(){
callback();
});
} kechengSchema.methods.zhaoxuesheng = function(num,callback){
//要通过学生类去找,this是课程对象,
Student.findOne({"name":this.student[num].name},function(err,result){
callback(err,result);
});
}
//课程类
var Kecheng = mongoose.model("Kecheng",kechengSchema); //实例化几个学生
var xiaoming = new Student({"name":"小明","age":12,"sex":"男"});
xiaoming.save();
Student.creat({"name":"小hua","age":10,"sex":"nv"});
var shuxue = new Kecheng({
"name" : "数学课",
"info" : "学数学的"
}); shuxue.tianjiaxuesheng(xiaoming,function(){
console.log("添加成功");
}); //寻找学生小明
Student.findOne({"name":"小明"},function(err,student){
student.zhangyisui();//学生表改了,课程表没改,
}); //通过课程找学生
Kecheng.findOne({"name":"数学课"},function(err,kecheng){
kecheng.zhaoxuesheng(0,function(err,result){
result.zhangyisui();
console.log(result);
});
});

node21---mongoose的更多相关文章

  1. mongoose - 让node.js高效操作mongodb

    Mongoose库简而言之就是在node环境中操作MongoDB数据库的一种便捷的封装,一种对象模型工具,类似ORM,Mongoose将数据库中的数据转换为JavaScript对象以供你在应用中使用. ...

  2. 在mongoose中使用$match对id失效的解决方法

    Topic.aggregate( //{$match:{_id:"5576b59e192868d01f75486c"}}, //not work //{$match:{title: ...

  3. Mongo基础使用,以及在Express项目中使用Mongoose

    MongoDB的基本使用 MongoDB特点: 使用BSON存储数据 支持相对丰富的查询操作(相对其他nosql数据库) 支持索引 副本集(支持多个实例/多个服务器运行同个数据库) 分片(数据库水平扩 ...

  4. mongoose数据库连接和操作

    var mongoose = require('mongoose') mongoose.connect('mongodb://localhost:27017/hometown'); var db = ...

  5. mongoose 和 mongoDB

    第三方学习地址:http://blog.csdn.net/foruok/article/details/47746057 下载mongoDB https://www.mongodb.com/downl ...

  6. Nodejs之MEAN栈开发(三)---- 使用Mongoose创建模型及API

    继续开扒我们的MEAN栈开发之路,前面两节我们学习了Express.Jade引擎并创建了几个静态页面,最后通过Heroku部署了应用. Nodejs之MEAN栈开发(一)---- 路由与控制器 Nod ...

  7. Mongoose Schemas定义中timestamps选项的妙用

    在Node.js中使用MongoDB少不了Mongoose. 假设有如下Mongoose Schemas的定义: var ItemSchema = new mongoose.Schema({ biz: ...

  8. Mongodb 数据类型及Mongoose常用CURD

    前言 看完了Node.js实战,其中在数据存储部分提到了Redis.Mongodb,我自己也根据书中的介绍写了几个简单的demo,在demo的过程首先遇到的问题就是数据类型和常见的CURD写法. mo ...

  9. Mongoose使用案例--让JSON数据直接入库MongoDB

    目录 1.准备工作. 2.配置Mongoose. 3.创建目录及文件. 4.插入数据,POST提交JSON增加一条记录. 5.查询数据,取出你插入数据库的记录. 一.准备工作 使用Express4创建 ...

  10. 利用Mongoose来结构化模式与验证

    Mongoose是一个文档对象模型(ODM)库,为MongoDB Node.js原生驱动程序提供更多的功能. 把结构化的模式应用到一个MongoDB集合,提供了验证和类型转换的好处 Mongoose通 ...

随机推荐

  1. tcMalloc 配置和优化 nginx 高性能

    tcMalloc优化nginx  记住:nginx一定要先启动 1>下载安装libunwind: #wget  http://download.savannah.gnu.org/releases ...

  2. 【scikit-learn】交叉验证及其用于參数选择、模型选择、特征选择的样例

     内容概要¶ 训练集/測试集切割用于模型验证的缺点 K折交叉验证是怎样克服之前的不足 交叉验证怎样用于选择调节參数.选择模型.选择特征 改善交叉验证 1. 模型验证回想¶ 进行模型验证的一个重要目 ...

  3. JS的 验证组织机构的合法性

    以下直接上代码 //验证组织机构合法性方法 function orgcodevalidate(value){ if(value!=""){ var values=value.spl ...

  4. iodine免费上网——本质就是利用dns tunnel建立tcp,然后tcp proxy来实现通过访问虚拟dns0网卡来访问你的dns 授权server

    我的命令: server端: sudo iodined -P passwd -f -DD 10.0.0.100 abc.com client端(直连模式,-r表示使用xxx.abc.com的xxx来转 ...

  5. [IOI 1999] 花店橱窗布置

    [题目链接] https://www.luogu.org/problemnew/show/P1854v [算法] f[i][j]表示放了前i束花,第i束花放在第j个花瓶中,所能获得的最大美学值 由于要 ...

  6. SQL Server中怎样可以从SELECT语句的结果集中删除重复行

    首先要分析出现重复记录的原因,是不是有一些where条件没有加上,把该加的条件都加上如果还有结果集重复,考虑以下方法去重: 结果集中去除重复行可以使用函数[distinct]也可以使用分组语句[gro ...

  7. 配置 Windows Phone 8.1通过Fiddler代理上网

    第一部分,共享笔记本无线网络 前提条件: 1)笔记本一台(双网卡(有线+无线网卡) 2)网络适配器中有2张网卡: 有线连接,名称Ethernet(必须已插上有线网络,且可以上网) 无线连接,名称Wi- ...

  8. NGUI 按钮点击事件的两种绑定形式

    面板属性栏绑定 写一个脚本,定义一个Public的方法 Notify中选择物体时,选中自己 然后就可以选择通知到写的那个脚本的里边的public方法 代码绑定 创建一个代码文件,挂载到按钮对象上 代码 ...

  9. You-Dont-Need-JQuery (你不需要JQuery)

    看完这篇文章我才觉得真的要用JQuery ,因为实在是有些地方设计的使用太复杂了, document.querySelector() 和 Document.querySelectorAll 的确是很方 ...

  10. vue 阿里云上传组件

    vue 阿里云上传组件 Vue.js上传图片到阿里云OSS存储 测试项目git地址 本测试项目启动方法 示例链接 组件配置项 实践解释 本文主要介绍如何 在vue项目中使用web 直传方式上传阿里云o ...