mongoose连表查询与更改

mongoose中的连表查询

github地址
population API

当找不到外链ID会跳过此ID

比如 Name1中有三个_id分别为

1
2
3
{
test:[1,2,3] ref:Name2
}

Name2中以_id来索引表分别为

1
2
3
4
5
6
7
8
9
10
11
12
{
_id:1
name:1
},
{
_id:2
name:2
},
{
_id:3
name:3
}

现在删除Name2中的_id:2但是不删除Name1中的test外键中的_id:2
这样索引出来会索引出_id:1 _id:3并且不会报错.

建立关联表

表一:Name

1
2
3
4
5
6
var ObjectId=mongoose.Schema.Types.ObjectId
var NameSchema=new mongoose.Schema({
name:String,
age:{type:Number,default:18},
classId:[{type:ObjectId,ref:"ClassName"}]
})

表二:ClassName

1
2
3
4
5
6
7
8
var ClassSchema=new mongoose.Schema({
className:{
type:String,
unique:true
},
credit:Number
}
)

表一中有个字段为 classId 其中存储的类型是ObjectId,并且通过ref与ClassName表建立起关系

添加课程数据

1
2
3
4
5
6
7
8
9
10
11
Class=new ClassModel({
className:"数学",
credit:5
})
_Class.save(function(err,doc){console.log(doc)})
_Class=new ClassModel({
className:"语文",
credit:10
})
_Class.save(function(err,doc){console.log(doc)})

添加用户

1
2
3
4
5
6
7
8
9
10
11
12
13
_Name=new NameModel({
name:"小明",
age:20
})
_Name.save(function(err,doc){console.log(doc)})
_Name=new NameModel({
name:"小红",
age:25
})
_Name.save(function(err,doc){console.log(doc)})

为用户添加课程

这里classId需要添加的是ClassName中的_id

1
2
3
4
5
NameModel.findOne({name:"小明"},function(err,doc){
console.log(57,doc)
//语文
doc.classId.push("5678bd800c79fdf00e15b184")
doc.save()})

连表查询

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
NameModel.findOne({name:"小明"},function(err,doc){
console.log(57,doc)
//语文
doc.classId.push("5678bd800c79fdf00e15b184")
doc.save()
// 连表查询小明选择的课程
NameModel
.findOne({name:"小明"})
.populate("classId")
.exec(function(err,doc){
console.log(69,doc)
/*
* { age: 20,
* classId:
* [ { __v: 0,
* credit: 10,
* className: '语文',
* _id: 5678bd800c79fdf00e15b184 } ],
* __v: 1,
* name: '小明',
* _id: 5678c36088fd47482e1df3de }
*
*
* */
})
});

查询与更改

比如我想要直接更改ClassName中的名字 把语文更改为物理..那么直接population后更改保存时不行的

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
NameModel.findOne({name:"小明"},function(err,doc){
console.log(57,doc)
//语文
doc.classId.push("5678bd800c79fdf00e15b184")
doc.save()
// 连表查询小明选择的课程
NameModel
.findOne({name:"小明"})
.populate("classId")
.exec(function(err,doc){
console.log(69,doc)
/*
* { age: 20,
* classId:
* [ { __v: 0,
* credit: 10,
* className: '语文',
* _id: 5678bd800c79fdf00e15b184 } ],
* __v: 1,
* name: '小明',
* _id: 5678c36088fd47482e1df3de }
*
*
* */
doc.classId[0].name="物理"
doc.save()
})
});

更改后保存不会出错,但是,className数据库中的语文并不会更改…
只有用classnamemodel查询一次后更改了

自用七牛上传下载

自用nodejs版七牛上传下载功能

Blog
GitHub下载
list
get
upload

自用功能

自动对比服务器文件上传,
自动获取服务器文件下载,
获取服务器上所有文件

依赖模块

  • npm install qiniu
  • npm install request
  • npm install underscore

JS中最下方的初始化

1
2
3
4
5
AK: 你的七牛AK,
SK: 你的七牛SK,
path: 需要同步文件夹以当前文件夹下的文件夹,非绝对路径如:"/uploadQN"指的是当前文件夹下的uploadQN,
bucket: 你的七牛空间,
domain: 你的七牛CDN域名 用来下载

gulp学习笔记

gulp学习笔记

本渣渣来学习gulp了!为什么不用grunt?因为gulp他字短啊!字短..短…..

什么是gulp

在我看来gulp就是一个未完成的人,so.什么是人?有感情有思想的才是人.对了还有肉体.
但是这个”未完成的人”给我提供了四个工具

  • gulp.src
  • gulp.dest
  • gulp.task
  • gulp.watch

有了这四个工具我就可以拿起锤子打造肉体,拿起斧头打造脑袋…
但是..你打造肉体总得有啥材料吧,你做个极品武器不是还要一堆稀有神器材料.
so.gulp开发者给我们提供了一大堆的材料,而且你只需要去找一位名叫nodejs的npc接一个名为安装的任务,
这位npc就会给你一个npm强化+13的神器.哦不对!是史诗.
所以,我们可以在npm找到很多跟gulp有关的插件.没有插件光有个gulp也没啥用啊.

人体实验——打造WEB开发人员

安装gulp

安装到办公室里:

1
npm install -g gulp

再把他安装到自己办公桌上:

1
npm install gulp

okay,现在可以在办公桌上进行人体实验了.

如何让我继续爱下去——二次元

如何让我继续爱下去——二次元

标题用”如何让我继续爱下去——二次元”不如用”二次元,给我带来了什么”.
从初中,准确点说应该是小学,更准确点是小学4年级,每天放学后守在电视机旁,就等着每天的期望,相信大家都应该知道是什么动漫了吧,right! 数码宝贝!每天坐在教室,每天托着脸望着窗外发呆,心思没有停留在课堂之上,停留在昨天的数码宝贝中,期望立马放学.
小学6年级的时候,有幸接触到了dvd,从此每天放学都会往dvd店走,应该说是跑或者奔,龙珠GT,乱马1/2,火影忍者..
初一,更是有幸接触到了web,那时候用的是电信ADSL 2M宽带.为了看一部高清的动漫更是晚上关了显示器,把动漫资源挂一晚上,第二天早晨清早起床看一集后带着不舍的感情去上学.当时是在”迅雷看看”里看动漫,当时还没番的概念,单纯的认为所有的动漫都是完结状态的.当时,看的是家庭教师reborn,当时,并没有完结.当时,我离开了这部动漫,于是看了一部对我至今影响深刻的动漫–angel beats!
从第一集至第12集(当时不知道有13集和ova这个概念)几乎是一口气看完的,看完后坐在电脑旁,双目无神,心思甚至停留在剧情中,本身像行尸走肉一般,毫无思想,毫无目的.为什么要有那么悲剧的动漫?为什么最后的结局不是在一起反而要分开,为什么拥抱成了最后的一幕,为什么会有死后的世界.如果我死去会不会与他们相见,当时的我以茫然,分不清现实与虚拟的差别,甚至傻乎乎的去寻找这段剧情的真实性,甚至去找那不存在的美好结局. 这段“治愈”动漫给了我很大的感触,直至今日,我甚至不敢看以悲剧结尾的动漫无论画风多好,无论人物刻画多成功,我逃避着,逃避着过去,逃避着内心深处的脆弱与无知。

慕课网nodejs建站第一期

项目地址

github

引用的nodejs库

  • express
  • path
  • mongoose
  • underscore
  • bodyParser

目录结构

  • models:用来存放mongoose model目录
  • public:静态文件
    • js:静态js库
    • libs:公共静态资源库
  • schemas:mongoose schemas目录
  • views:视图模板目录
    • includes:视图模板公共目录
    • pages:视图模板页面目录
    • layout.jade 视图主模板

数据库构建

nodejs爬虫-笨笨兔的故事

##起始
想找个笨笨兔的故事txt版的放kindle上 无奈网上都是pdf版的,不过倒是有在线阅读的
http://www.linuxidc.com/Linux/2010-12/30786.htm
于是打算自己用nodejs写个爬虫来爬一下网站内容生成txt传输到kindle
具体请参考我的github

开始编写

用到的库有

  • superagent //request请求
  • async //并发(异步)流程控制库 用来控制并发数
  • cheerio //nodejs的jquery