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> # 可选,抛出异常的级别
}
)
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> # 可选,抛出异常的级别。
}
)
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> # 可选,抛出异常的级别。
} )
db.collection.remove(
<query>, # 可选,删除的文档的条件。
{
justOne: <boolean>, # 可选,值为true或1只删除一个文档,默认值 false删除所有匹配条件的文档。
writeConcern: <document> # 可选,抛出异常的级别。
} )
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() 方法以格式化的方式来显示所有文档。
>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"
}]
}
数据文档
{
"_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("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")
]
}
用户文档
{
"_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"]}})
本文来自博客园,作者:极地阳光-ing,转载请注明原文链接:https://www.cnblogs.com/Polar-sunshine/p/13082167.html


浙公网安备 33010602011771号