MongoDB

安装MongoDB和账号管理

1、安装路径为
D:\MongoDB,将D:\MongoDB\bin目录加入环境变量

2、新建目录与文件

D:\MongoDB\data\db
D:\MongoDB\log\mongod.log

3、制作系统服务

mongod --bind_ip 0.0.0.0 --port 27017 --logpath D:\MongoDB\log\mongod.log
--logappend --dbpath D:\MongoDB\data\db  --serviceName "MongoDB" --serviceDisplayName "MongoDB"  --install

4、启动系统服务/关闭系统服务

net start MongoDB  /  net stop MongoDB 

5、进入MongoDB

当进入MongoDB有一些警告信息,需要去掉

首先关闭服务,再进行重启数据库

mongod --remove

mongod --bind_ip 0.0.0.0 --port 27017 --logpath D:\MongoDB\log\mongod.log
--logappend --dbpath D:\MongoDB\data\db  --serviceName "MongoDB" --serviceDisplayName "MongoDB"  --install --auth

在MongoDB外登录账号

mongo --port 27017 -u "root" -p "123" --authenticationDatabase "admin"

6、创建账号,MongoDB每个数据库都是唯一账号密码,所以先进入其内再进行创建

use admin
db.createUser(

  {

    user: "root",

    pwd: "123",

    roles: [ { role: "root", db: "admin" } ]    # 创建权限

  }

)
#创建一个普通账号
use test    

db.createUser(

  {

    user: "egon",  

    pwd: "123",

    roles: [ { role: "readWrite", db: "test" },  #操作test库有读写权限

             { role: "read", db: "db1" } ]    #操作其他库只有读的权限

  }

)

 
代码

二、操作

1、数据库操作

#1、增
use config #如果数据库不存在,则创建数据库,否则切换到指定数据库。
 
#2、查
show dbs #查看所有
可以看到,我们刚创建的数据库config并不在数据库的列表中, 要显示它,我们需要向config数据库插入一些数据。
db.user.insert({'a':1})

#3、删
use config #先切换到要删的库下
db.dropDatabase() #删除当前库

2、集合操作:

#1、增
  #mongoDB 中得表没有父子的关系
  db.user
  db.user.info
  db.user.auth
      # 创建一个id是1,名字是egon的数据,id必须写_id
  db.user.insert({"_id":1,"name":""egon"})
#2、查
> show dbs #只要不为空就能显示出来
> show tables
> show collextions  #与tables一样功能
table1
table2
#3、删

> db.table1.drop()
true
> show tables
table2

 3、文档操作

添加数据进入表

db.user.insert({"_id":1,"name":"egon"})

《a、增加》

#1、没有指定_id则默认ObjectId,_id不能重复,且在插入后不可变

#2、插入单条
user0={
    "name":"egon",
    "age":10,
    'hobbies':['music','read','dancing'],
    'addr':{
        'country':'China',
        'city':'BJ'
    }
}
#把user0的数据添加进去
db.user.insert(user0)
#查看表里的所有数据
db.user.find()

#3、插入多条
user1={
    "_id":1,
    "name":"alex",
    "age":10,
    'hobbies':['music','read','dancing'],
    'addr':{
        'country':'China',
        'city':'weifang'
    }
}

user2={
    "_id":2,
    "name":"wupeiqi",
    "age":20,
    'hobbies':['music','read','run'],
    'addr':{
        'country':'China',
        'city':'hebei'
    }
}


user3={
    "_id":3,
    "name":"yuanhao",
    "age":30,
    'hobbies':['music','drink'],
    'addr':{
        'country':'China',
        'city':'heibei'
    }
}

user4={
    "_id":4,
    "name":"jingliyang",
    "age":40,
    'hobbies':['music','read','dancing','tea'],
    'addr':{
        'country':'China',
        'city':'BJ'
    }
}

user5={
    "_id":5,
    "name":"jinxin",
    "age":50,
    'hobbies':['music','read',],
    'addr':{
        'country':'China',
        'city':'henan'
    }
}
#添加多条数据进去
db.user.insertMany([user1,user2,user3,user4,user5])
单条插入与多条插入
# 基于save添加
    db.t1.insert({"_id":1,"a":1,"b":2,"c":3}) #有相同的_id则覆盖,无相同的_id则新增,必须指定_id db.t1.save({"_id":1,"z":6}) db.t1.save({"_id":2,"z":6}) db.t1.save({"z":6})

《b、查询

#SQL与MongoDB查询分别:
# SQL:=,!=,>,<,>=,<=
# MongoDB:{key:value}代表什么等于什么,"$ne","$gt","$lt","gte","lte",其中"$ne"能用于所有数据类型

#1、名字等于alex
SQL:select * from db1.user where name = "alex";
MongoDB:db.user.find({'name':'alex'})

#2、名字不等于alex
SQL:select * from db1.user where name != "alex";
MongoDB:db.user.find({'name':{"$ne":'alex'}})

#3、id大于2
SQL:select * from db1.user where id > 2;
MongoDB:db.user.find({'_id':{'$gt':2}})

#4、id小于3
SQL:select * from db1.user where id < 3;
MongoDB:db.user.find({'_id':{'$lt':3}})

#5、id大于等于2
SQL:select * from db1.user where id >= 2;
MongoDB:db.user.find({"_id":{"$gte":2,}})

#6、id小于等于2
SQL:select * from db1.user where id <= 2;
MongoDB:db.user.find({"_id":{"$lte":2}})
比较运算

SQL语句中:and、or、not   

MongoDB中:筛选只能是字典套条件{{},[]}  逗号“,”是和的意思,

或者:“$or”后面条件放入[]中,“$or”:[]              否则:用“$not”表示

# SQL:and,or,not
# MongoDB:字典中逗号分隔的多个条件是and关系,"$or"的条件放到[]内,"$not"

#1、取出id大于等于2和小于4的数据
SQL:select * from db1.user where id >= 2 and id < 4;
MongoDB:db.user.find({'_id':{"$gte":2,"$lt":4}})

#2、取出id大于等于2和年龄小于40的数据
SQL:select * from db1.user where id >= 2 and age < 40;
MongoDB:db.user.find({"_id":{"$gte":2},"age":{"$lt":40}})

#3、取出id大于等于5或者name等于alex的数据
SQL:select * from db1.user where id >= 5 or name = "alex";
MongoDB:db.user.find({
    "$or":[
        {'_id':{"$gte":5}},
        {"name":"alex"}
        ]
})
#取出id(大于等于0和小于等于1)或id大于等于4或name等于yuanhao的数据
SQL:select * from db1.user where id >=0 and id <=1 or id >=4 or name = "yuanhao";
MongoDB:db.user.find({"$or":[
{"_id":{"$lte":1,"$gte":0}},
{"_id":{"$gte":4}},
{"name":"yuanhao"}
]})
#4、取出除以2于1的id
SQL:select * from db1.user where id % 2=1;
MongoDB:db.user.find({'_id':{"$mod":[2,1]}})

#5、上题,取反
db.user.find({'_id':{"$not":{"$mod":[2,1]}}})

逻辑运算
逻辑运算

成员运算:$in,$nin

#查询name中alex和egon是否在数据中
db.user.find({"name":{"$in":["alex","egon"]}})
db.user.find({"name":{"$nin":["alex","egon"]}})

正则匹配

#查询以jin开头和以g或n结尾的数据,i是区分大小写的
select * from db1.user where name regexp "^jin.*?(g|n)$";
db.user.find({
    "name":/^jin.*?(g|n)$/i
})

查指定字段

#0是不显示其字段,1就是显示其字段
select name,age from db1.user where name regexp "^jin.*?(g|n)$";
db.user.find({
    "name":/^jin.*?(g|n)$/i
},
{
    "_id":0,
    "name":1,
    "age":1
}
)

查询数组

#1、查看有dancing爱好的人
db.user.find({'hobbies':'dancing'})

#2、查看既有dancing爱好又有tea爱好的人
db.user.find({'hobbies':{"$all":['dancing','tea']}})

#3、查看第2个爱好dancing的人
db.user.find({"hobbies.2":"dancing"})

#4、查看数据中以索引[1,2]切片显示爱好,并且只显示爱好字段
db.user.find(
{},
{
    "_id":0,
    "name":0,
    "age":0,
    "addr":0,
    "hobbies":{"$slice":[1,2]},
}
)
按照条件查询(数组)

排序

# 排序:--1代表升序,-1代表降序
db.user.find().sort({"name":1,})
db.user.find().sort({"age":-1,'_id':1})

获取数量

# 获取数量
db.user.count({'age':{"$gt":30}}) 
--或者
db.user.find({'age':{"$gt":30}}).count()
#1、{'key':null} 匹配key的值为null或者没有这个key
db.t2.insert({'a':10,'b':111})
db.t2.insert({'a':20})
db.t2.insert({'b':null})

> db.t2.find({"b":null})
{ "_id" : ObjectId("5a5cc2a7c1b4645aad959e5a"), "a" : 20 }
{ "_id" : ObjectId("5a5cc2a8c1b4645aad959e5b"), "b" : null }

#2、查找所有
db.user.find() #等同于db.user.find({})
#格式变好看
db.user.find().pretty()

#3、查找一个,与find用法一致,只是只取匹配成功的第一个
db.user.findOne({"_id":{"$gt":3}})
杂项

《c、修改》

#update() 方法用于更新已存在的文档。语法格式如下:
db.user.update(
    条件,
    修改字段,
    {
     upsert: <boolean>,
     multi: <boolean>,
     writeConcern: <document>
   }
    )
参考SQL:update db1.t1 set id=10 where name="egon";
upsert : 可选,默认为false,代表如果不存在update的记录不更新也不插入,设置为true代表插入。
multi : 可选,默认为false,代表只更新找到的第一条记录,设为true,代表更新找到的全部记录。
writeConcern :可选,抛出异常的级别。
更新操作是不可分割的:若两个更新同时发送,先到达服务器的先执行,然后执行另外一个,不会破坏文档。
update语法
#查找name等于egon,把age修改为11,如果没有upsert为true就会添加一条只有age=11的数据
db.user.update(
    {"name":"egon"},
    {"age":11},
    {
        "multi":true,
        "upsert":true
    }
    )
update列子
#覆盖式:就是按照条件查找数据,修改的数据把原来的数据覆盖掉(慎用)
db.user.update(
        {"name":"alex"},
        {"age":10,"name":"Alex**"}
    )
覆盖式
    #局部修改:$set  只修改更新字段(很受用)如果没有age字段,同样会自动添加
db.user.update(
        {"name":"alex"},
        {"$set":{"age":73,"name":"潘金莲-alex"}}
    )
局部修改
#改多条 就是把查询知识运用进来,请看查询
db.user.update(
        {"_id":{"$gte":1,"$lte":2}},
        {"$set":{"age":53,}},
        {"multi":true}
    )
多条修改
#修改嵌套文档  大概意思就是字典中如果还有字典,就可以用“.”进行内部修改(不懂自己实验)
#{ "_id" : 3, "name" : "潘金莲-alex", "age" : 30, "hobbies" : [ "music", "drink" ], "addr" : { "country" : "China", "city" :
"heibei" } }
db.user.update(
        {"name":"潘金莲-alex"},
        {"$set":{"addr.country":"Japan"}}
字典嵌套(.一下就懂)
#修改数组  也就是按照索引修改(MMP脑袋炸了,一看到数字就蒙蔽)
    db.user.update(
        {"name":"潘金莲-alex"},
        {"$set":{"hobbies.1":"Piao"}}
    )
修改数组(索引)

 

《d、删除》

#1、删除多个中的第一个
db.user.deleteOne({ 'age': 8 })

#2、删除国家为China的全部
db.user.deleteMany( {'addr.country': 'China'} ) 

#3、删除全部
db.user.deleteMany({}) 
#1、unset 删除某字段所有记录
db.user.update(
        {"name":"潘金莲-alex"},
        {"$unset":{"hobbies":""}}
    )
#2、$inc 增加和减少,加减法懂就能明白其道理
db.user.update(
        {},
        {"$inc":{"age":1}},
        {"multi":true}
    )
db.user.update(
        {},
        {"$inc":{"age":-10}},
        {"multi":true}
    )
#3、$push, $pop  $pull   一个添加,两个删除
#按照字段添加其数据(简单)
db.user.update(
        {"name":"yuanhao"},
        {"$push":{"hobbies":"tangtou"}},
        {"multi":true}
    )
#$each就是把列表循环加如字段内
db.user.update(
        {"name":"yuanhao"},
        {"$push":{"hobbies":{"$each":["纹身","抽烟"]}}},
        {"multi":true}
    )

#从头删-1,从尾删1
db.user.update(
        {"name":"yuanhao"},
        {"$pop":{"hobbies":-1}},
        {"multi":true}
    )

db.user.update(
        {"name":"yuanhao"},
        {"$pop":{"hobbies":1}},
        {"multi":true}
    )

#按条件删
db.user.update(
        {"name":"yuanhao"},
        {"$pull":{"hobbies":"纹身"}},
        {"multi":true}
    )
花样删除法
#避免添加重复:"$addToSet" ,了解了解

db.urls.insert({"_id":1,"urls":[]})

db.urls.update({"_id":1},{"$addToSet":{"urls":'http://www.baidu.com'}})
db.urls.update({"_id":1},{"$addToSet":{"urls":'http://www.baidu.com'}})
db.urls.update({"_id":1},{"$addToSet":{"urls":'http://www.baidu.com'}})

db.urls.update({"_id":1},{
    "$addToSet":{
        "urls":{
        "$each":[
            'http://www.baidu.com',
            'http://www.baidu.com',
            'http://www.xxxx.com'
            ]
            }
        }
    }
)
避免重复添加

 

转载于:https://www.cnblogs.com/f1443526266/p/8318863.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值