node21---mongoose
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的更多相关文章
- mongoose - 让node.js高效操作mongodb
Mongoose库简而言之就是在node环境中操作MongoDB数据库的一种便捷的封装,一种对象模型工具,类似ORM,Mongoose将数据库中的数据转换为JavaScript对象以供你在应用中使用. ...
- 在mongoose中使用$match对id失效的解决方法
Topic.aggregate( //{$match:{_id:"5576b59e192868d01f75486c"}}, //not work //{$match:{title: ...
- Mongo基础使用,以及在Express项目中使用Mongoose
MongoDB的基本使用 MongoDB特点: 使用BSON存储数据 支持相对丰富的查询操作(相对其他nosql数据库) 支持索引 副本集(支持多个实例/多个服务器运行同个数据库) 分片(数据库水平扩 ...
- mongoose数据库连接和操作
var mongoose = require('mongoose') mongoose.connect('mongodb://localhost:27017/hometown'); var db = ...
- mongoose 和 mongoDB
第三方学习地址:http://blog.csdn.net/foruok/article/details/47746057 下载mongoDB https://www.mongodb.com/downl ...
- Nodejs之MEAN栈开发(三)---- 使用Mongoose创建模型及API
继续开扒我们的MEAN栈开发之路,前面两节我们学习了Express.Jade引擎并创建了几个静态页面,最后通过Heroku部署了应用. Nodejs之MEAN栈开发(一)---- 路由与控制器 Nod ...
- Mongoose Schemas定义中timestamps选项的妙用
在Node.js中使用MongoDB少不了Mongoose. 假设有如下Mongoose Schemas的定义: var ItemSchema = new mongoose.Schema({ biz: ...
- Mongodb 数据类型及Mongoose常用CURD
前言 看完了Node.js实战,其中在数据存储部分提到了Redis.Mongodb,我自己也根据书中的介绍写了几个简单的demo,在demo的过程首先遇到的问题就是数据类型和常见的CURD写法. mo ...
- Mongoose使用案例--让JSON数据直接入库MongoDB
目录 1.准备工作. 2.配置Mongoose. 3.创建目录及文件. 4.插入数据,POST提交JSON增加一条记录. 5.查询数据,取出你插入数据库的记录. 一.准备工作 使用Express4创建 ...
- 利用Mongoose来结构化模式与验证
Mongoose是一个文档对象模型(ODM)库,为MongoDB Node.js原生驱动程序提供更多的功能. 把结构化的模式应用到一个MongoDB集合,提供了验证和类型转换的好处 Mongoose通 ...
随机推荐
- HDU 5654 xiaoxin and his watermelon candy 离线树状数组
xiaoxin and his watermelon candy Problem Description During his six grade summer vacation, xiaoxin g ...
- UESTC--1263--The Desire of Asuna(贪心)
The Desire of Asuna Time Limit: 1000MS Memory Limit: 65535KB 64bit IO Format: %lld & %llu Su ...
- hdoj--1028--Ignatius and the Princess III(母函数)
Ignatius and the Princess III Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K ...
- 网易NAPM Andorid SDK实现原理--转
原文地址:https://neyoufan.github.io/2017/03/10/android/NAPM%20Android%20SDK/ NAPM 是网易的应用性能管理平台,采用非侵入的方式获 ...
- 【转】如何使用windows的计划任务?计划任务?
我们经常有一些程序想要过了几小时来运行:比如定时关机 或者说希望能够每天的几点执行一个什么程序: 这些所有的操作都需要用到windows的任务计划:或者叫计划任务:反正都一样 下面小编将指导大家创建一 ...
- Chrome 开发工具系列
- 高德SDK获取到的坐标转换为GPS真实坐标方法,Java版
发现高德SDK不提供高德的坐标转GPS坐标(GCJ_02转WGS_84),下面是一份Java版的 /**************************** 文件名:GCJ2WGS.java 创建时间 ...
- [OS][ linux ] 建立新帳號, 變更密碼, 加入 sudoer
新增 linux , 設定預設 password, 新增 user 到 sudoers 1. 新增 User sudo useradd aa97 2. 設定 User password sudo pa ...
- 由一道面试题简单扩展 — setTimeout、闭包
在一个前端公众号,看到这么一个号称简单的面试题: 1.以下程序输出什么? <script type="text/javascript"> function init() ...
- Debian下签名无法验证
又收集到的新方法 gpg --keyserver subkeys.pgp.net --recv-keys AED4B06F473041FA && apt-key add /root ...