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> # 可选,抛出异常的级别。  
} )

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"]}})
posted @ 2020-06-10 00:26  极地阳光-ing  阅读(146)  评论(0编辑  收藏  举报