mongoDB
sql和mongodb的术语对比
SQL术语/概念 | MongoDB术语/概念 | 解释/说明 |
---|---|---|
database | database | 数据库 |
table | collection | 数据库表/集合 |
row | document | 数据记录行/文档 |
column | field | 数据字段/域 |
index | index | 索引 |
table joins | 表连接,MongoDB不支持 | |
primary key | primary key | 主键,MongoDB自动将_id字段设置为主键 |
库操作
1.客户端
# 使用自带的客户端,找到安装目录,执行bin目录下的mongo.exe mongo.exe # 使用admin用户和密码 123456 连接到本地的 MongoDB 服务上(如果要连接到指定的数据库上,需要在localhost后面继续追数据库的名字,如:localhost/test): mongodb://admin:123456@localhost/
2.查看所有的数据库
show dbs
3.创建数据库
use XXX # XXX是数据库名字 # 说明:新创建的数据库如果里面没有数据,使用show dbs查看时会看不到,需要插入数据后才能看到。
4.删除数据库
# 首先要转到该数据库下 use XXX # 然后删除该数据库 db.dropDatabase
集合操作-表操作
> use cmdb_t > db.createCollection("search_pro") # 先创建集合,类似数据库中的表 > show tables search_pro > db.cmdb_t.drop() # 删除所有集合 true > show tables
文档操作-数据操作
插入数据
# 插入数据 >db.表名.insert({'pkg_name':'searchops', tags: ['mongodb', 'database', 'NoSQL'], likes: 100 }) # 创建变量并插入变量 > document= {'pkg_name':'searchops2' , tags: ['mongodb', 'database', 'NoSQL'], likes: 200 } > db.search_project.insert(document)
更新数据
update
db.collection.update( <query>, #update的查询条件 <update>, #update的对象和要更新的操作(如$,$inc...)等 { upsert: <boolean>, # 可选,如不存在update记录,是否插入objNew,true为插入,默认false不插入。 multi: <boolean>, # 可选,默认false,只更新找到的第一条,参数为true则按条件查出的多条记录全部更新。 writeConcern: <document> # 可选,抛出异常的级别 } )
# 找到pkg_name 为searchops2的项,将title设置为search_v3 db.search_project.update({'pkg_name':'searchops2'},{$set:{'title':'search_v3'}}) # 只改一条数据 db.search_project.update({'pkg_name':'searchops2'},{$set:{'title':'search_v3'}},{multi:true}) # 改所有pkg_name为searchops2的项
save
db.collection.save( <document>, # 文档数据 { writeConcern: <document> # 可选,抛出异常的级别。 } )
# 会将相同id的数据中的内容替换成save中的内容 db.search_project.save({ "_id" : ObjectId("5e1ebab7ec1107d60b203516"), "pkg_name" : "search_v3", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 200 })
删除数据
db.collection.remove( <query>, # 可选,删除的文档的条件。 { justOne: <boolean>, # 可选,值为true或1只删除一个文档,默认值 false删除所有匹配条件的文档。 writeConcern: <document> # 可选,抛出异常的级别。 } )
接下来我们移除 title 为 'MongoDB 教程' 的文档: # 删除所有符合条件的数据 >db.search_project.remove({'likes':100}) # 只删除第一条找到的记录 >db.search_project.remove({'likes':100},1) 如果你只想删除第一条找到的记录可以设置 justOne 为 1,如下所示: # 删除所有数据,可以使用以下方式(类似常规 SQL 的 truncate 命令): >db.col.remove({})
查找数据
单文档查询
>db.collection.find(query, projection) query :可选,使用查询操作符指定查询条件 projection :可选,使用投影操作符指定返回的键。查询时返回文档中所有键值, 只需省略该参数即可(默认省略)。 >db.col.find().pretty() pretty() 方法以格式化的方式来显示所有文档。
操作 | 格式 | 范例 | RDBMS中的类似语句 |
---|---|---|---|
等于 | {<key>:<value> } |
db.col.find({"likes":"100"}).pretty() |
where likes = '100' |
小于 | {<key>:{$lt:<value>}} |
db.col.find({"likes":{$lt:50}}).pretty() |
where likes < 50 |
小于或等于 | {<key>:{$lte:<value>}} |
db.col.find({"likes":{$lte:50}}).pretty() |
where likes <= 50 |
大于 | {<key>:{$gt:<value>}} |
db.col.find({"likes":{$gt:50}}).pretty() |
where likes > 50 |
大于或等于 | {<key>:{$gte:<value>}} |
db.col.find({"likes":{$gte:50}}).pretty() |
where likes >= 50 |
不等于 | {<key>:{$ne:<value>}} |
db.col.find({"likes":{$ne:50}}).pretty() |
where likes != 50 |
# 查找所有数据 db.search_project.find(); # and db.col.find({"likes":100, "pkg_name":"search"}).pretty() #or db.col.find({$or: [{key1: value1}, {key2:value2}]}).pretty() # and 和 or >db.col.find({"likes": {$gt:50}, $or: [{"pkg_name": "search"},{"title": "search_v3"}]}).pretty()
# $type 指定查找类型,指定查找title 为 String 的数据 db.search_project.find({"title" : {$type : 'string'}})
关系查询
嵌入式关系
{ "_id":ObjectId("52ffc33cd85242f436000001"), "contact": "987654321", "dob": "01-01-1991", "name": "Tom Benzamin", "address": [ { "building": "22 A, Indiana Apt", "pincode": 123456, "city": "Los Angeles", "state": "California" }, { "building": "170 A, Acropolis Apt", "pincode": 456789, "city": "Chicago", "state": "Illinois" }] }
>db.users.findOne({"name":"Tom Benzamin"},{"address":1})
引用式关系
{ "_id":ObjectId("52ffc4a5d85242602e000000"), "building": "22 A, Indiana Apt", "pincode": 123456, "city": "Los Angeles", "state": "California" }
{ "_id":ObjectId("52ffc33cd85242f436000001"), "contact": "987654321", "dob": "01-01-1991", "name": "Tom Benzamin", "address_ids": [ ObjectId("52ffc4a5d85242602e000000") ] }
>var result = db.users.findOne({"name":"Tom Benzamin"},{"address_ids":1}) >var addresses = db.address.find({"_id":{"$in":result["address_ids"]}})