项目中用mongoose操作MongoDB,非关系型数据库MongoDB的结构以及语法与常用的关系型数据库相差很大,这里记录了MongoDB结构以及操作数据库的方法和一些增删改查实例。

结构

关于MongoDB的结构,官方文档给出了下面的参考

SQL MongoDB
database database
table collection
row document or BSON document
column field
index index
primary key primary key(默认自动设置为_id)

注:_id是在插入一条新的document时,系统自动生成的一个由时间、主机名、PID(进程ID)、INC(自增计数器)组合转换而成的24位字符串。

语法

现MongoDB内容如下

1
2
3
4
5
|-- info         //dbs
| |-- users //collection
| |-- logs
|
|-- test

进入MongoDB操作界面,默认进入test数据库。
操作及数据库

1
2
3
4
5
6
7
8
9
10
//显示所有数据库
show dbs
//显示操作数据库的帮助
db.help()
//进入info数据库,如果没有则创建一个info数据库,所以这也是创建命令
use infos
//显示当前所在的数据库,默认是test数据库
db
//删除当前数据库的所有记录,如果没有选定,默认删除test
db.dropDatabase()

操作集合

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//显示当前数据库中所有集合
show collections

//创建新集合records
db.records.insert({name:"leeon",time:new Date(),age:12})
db.createCollection("records")

//插入记录
db.records.insert({name:"pine",time:new Date(),age:12})
db.records.save({name:"pine",time:new Date(),age:12})

//删除集合records的所有记录
db.records.remove({})

//更新,name为leeon的记录age更新为20
db.records.update({name:"leeon"},{$set:{age:20}})

//查询所有记录
db.users.find()

常用操作符

$ne
语法:{field: {$ne: value} }

1
2
//查找users集合中,age!=20的记录
db.users.find({age:{$ne:20}})

$and
语法:{ $and: [{ }, { } , … , { } ]}

1
2
//查询users集合下name!=leeon&&age=20的记录
db.users.find({$and:[{name:{$ne:"leeon"}},{age:20}]})

$or
语法:{ $or: [{ }, { }, … , { }]}

1
2
//查询users集合下name!=leeon||age=20的记录
db.users.find({$or:[{name:{$ne:"leeon"}},{age:20}]})

$lt
语法:{field: {$lt: value} }

1
2
//查询users集合下age<20的记录
db.find({$lt:{age:20}})

$lte
语法:{ field: { $lte: value} }

1
2
//查询users集合下age<=20的记录
db.find({$lte:{age:20}})

$gt
语法:{field: {$gt: value} }

1
2
//查询users集合下age>20的记录
db.find({$gt:{age:20}})

$gte

1
2
//查询users集合下age>=20的记录
db.find({$gte:{age:20}})

注:save和insert的区别主要在于,新记录中指定的_id在集合中已存在,save会对原纪录进行覆盖,而insert不会操作,如果_id没有指定,则没有区别,都是进行插入
例子:

1
2
3
4
5
6
db.users.find()
//{"_id":1,"name":"leeon","age":23}
db.users.insert({"_id":1,name:"li",age:12})
//{"_id":1,"name":"leeon","age":23}
db.users.save({"_id":1,name:"li",age:12})
//{"_id":1,"name":"li","age":12}