mongoDB数据库

1、下载:https://www.mongodb.com/

2、解压完成后把bin目录放在环境变量中

3、在根目录下创建一些文件夹,

......\data\db
......\data\log
......\data\log\mongod.log


4、自制系统服务,

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

5、启动

net start MongoDB
net stop MongoDB

6、登录

mongo

 

#账号管理:https://docs.mongodb.com/master/tutorial/enable-authentication/
#1、创建账号
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" },
             { role: "read", db: "db1" } ]   #权限范围
  }
)


#2、重启数据库
mongod --remove
mongod --config "C:\mongodb\mongod.cfg" --bind_ip 0.0.0.0 --install --auth  #设置下配置文件,设置保存的路径登

#3、登录:注意使用双引号而非单引号
mongo --port 27017 -u "root" -p "123" --authenticationDatabase "admin"

#也可以在登录之后用db.auth("账号","密码")登录

C:\Users\Administrator>mongo
MongoDB shell version v3.6.2
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.6.2

>>


mongo
use admin
db.auth("root","123")

#推荐博客:https://www.cnblogs.com/zhoujinyi/p/4610050.html

创建账号密码+开启认证机制

每个库都对应的有一个账号,且在创建账号的时候就规定了使用的范围,如果用root用户登录可以操作所有的数据库

 

命令行shell

#1、mongo 127.0.0.1:27017/config #连接到任何数据库config

#2、mongo --nodb #不连接到任何数据库

#3、启动之后,在需要时运行new Mongo(hostname)命令就可以连接到想要的mongod了:
> conn=new Mongo('127.0.0.1:27017')
connection to 127.0.0.1:27017
> db=conn.getDB('admin')
admin

#4、help查看帮助

#5、mongo时一个简化的JavaScript shell,是可以执行JavaScript脚本的

 

关系:库>集合>文档

mysql:库>表>数据

 

1、数据库的操作:

#1、增
use config #如果数据库不存在,则创建数据库,否则切换到指定数据库。

#2、查
show dbs #查看所有
可以看到,我们刚创建的数据库config并不在数据库的列表中, 要显示它,我们需要向config数据库插入一些数据。
db.table1.insert({'a':1})

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

2、集合操作

#1、增
当第一个文档插入时,集合就会被创建
> use database1
switched to db database1
> db.table1.insert({'a':1})
WriteResult({ "nInserted" : 1 })
> db.table2.insert({'b':2})
WriteResult({ "nInserted" : 1 })

#2、查
> show tables
table1
table2

#3、删
> db.table1.drop()
true
> show tables
table2

3、文档操作

增加:

#创建一个user的局部变量,这是一个JavaScript对象
user={
    "name":"egon",
    'is_nb':true,
    'hobbies':['music','read','dancing']
}

db.userinfo.insert(user)
db.userinfo.find()


user1={
    "name":"asb",
    'is_sb':true,
    'hobbies':['music','read','dancing']
}
user2={
    "name":"egon",
    'is_sb':'wxx',
    'hobbies':['music','read','dancing']
}

user3={
    "name":"egon3",
    'is_sb':false,
    'hobbies':['music','read','dancing']
}
db.userinfo.insertMany([user1,user2,user3])

查 (db.表名.find())

db.userinfo.findOne()
# 查找所有
db.userinfo.find()
db.userinfo.find().pretty()

# 多个and条件
db.user.find({'name':'egon','age':{'$gt':20}})

# 也可不写条件,代表匹配所有
db.user.find({})

# 规定显示结果中有哪些key没有哪些key
> db.user.find({},{'_id':0,'name':1,'age':1})
{ "name" : "egon", "age" : 10 }
{ "name" : "egon", "age" : 20 }
{ "name" : "egon", "age" : 30 }

# "$lt" "lte" "$gt" "gte" "$ne",其中"$ne"能用于所有数据类型
db.user.find({'age':{'$gte':10,'$lt':30}})

# or查询,or的条件放到[]内,注意:一个{}内逗号分开的多个条件相当于and
db.user.find({'$or':[{'name':'egon'},{'age':{'$gte':30}}]})

# in和nin
db.user.find({'age':{'$in':[10,11,12,20]}})
db.user.find({'age':{'$nin':[10,11,12,20]}})

# {'$mod':[2,1]},对2取余如果为1则匹配成功
db.user.insert({'_id':1,'name':'egon','age':10})
db.user.insert({'_id':2,'name':'egon','age':20})
db.user.insert({'_id':3,'name':'egon','age':30})

> db.user.find()
{ "_id" : 1, "name" : "egon", "age" : 10 }
{ "_id" : 2, "name" : "egon", "age" : 20 }
{ "_id" : 3, "name" : "egon", "age" : 30 }

> db.user.find({'_id':{'$mod':[2,1]}})
{ "_id" : 1, "name" : "egon", "age" : 10 }
{ "_id" : 3, "name" : "egon", "age" : 30 }

# not 取反
> db.user.find({'_id':{'$not':{'$mod':[2,1]}}})
{ "_id" : 2, "name" : "egon", "age" : 20 }

# {'key':null} 匹配key的值为null或者没有这个key

# 正则表达式
> db.user.find({'name':/^e.*?n$/i})
{ "_id" : 1, "name" : "egon", "age" : 10 }
{ "_id" : 2, "name" : "egon", "age" : 20 }
{ "_id" : 3, "name" : "egon", "age" : 30 }

# 查询数组
> db.food.insert({'fruit':['apple','banana','peach']})
WriteResult({ "nInserted" : 1 })
> db.food.find({'fruit':'banana'}) #只要存在就可以
{ "_id" : ObjectId("5a5b7ad057147a04b81f2bc3"), "fruit" : [ "apple", "banana", "peach" ] }

> db.food.find({'fruit':{'$all':['banana','apple']}}) #既有banana又有apple

> db.food.find({'fruit.1':'banana'}) #按照位置

> db.blog.find().pretty()
{
        "_id" : 1,
        "name" : "alex意外死亡的真相",
        "comments" : [
                {
                        "name" : "egon",
                        "content" : "alex是谁???",
                        "thumb" : 200
                },
                {
                        "name" : "wxx",
                        "content" : "我去,真的假的",
                        "thumb" : 300
                },
                {
                        "name" : "yxx",
                        "content" : "吃喝嫖赌抽,欠下两个亿",
                        "thumb" : 40
                },
                {
                        "name" : "egon",
                        "content" : "xxx",
                        "thumb" : 0
                }
        ]
}
db.blog.find({},{'comments':{"$slice":-2}}).pretty() #查询最后两个
db.blog.find({},{'comments':{"$slice":[1,2]}}).pretty() #查询1到2



# 数组和范围查询的相互作用
db.test.insert({'x':5})
db.test.insert({'x':15})
db.test.insert({'x':25})
db.test.insert({'x':[5,25]})

> db.test.find({'x':{'$gt':10,'$lt':20}})
{ "_id" : ObjectId("5a5b8310b9b1b7388a40f993"), "x" : 15 }
{ "_id" : ObjectId("5a5b8310b9b1b7388a40f995"), "x" : [ 5, 25 ] }
#发现连非数组的也找出来了,如果只想匹配数组,则用$elemMatch
> db.test.find({'x':{"$elemMatch":{'$gt':10,'$lt':20}}}) #匹配不到内容
> db.test.find({'x':{"$elemMatch":{'$gt':5,'$lt':115}}}) #25属于该范围
{ "_id" : ObjectId("5a5b8310b9b1b7388a40f995"), "x" : [ 5, 25 ] }

#如果只想匹配非数组需要建立索引,结合min与max使用

改:

先取数据定义一个变量名,先对这个变量进行修改,直接(变量名、属性=新的值),然后利用对象跟变量进行更新操作。

#1、最简单的更新就是用一个新的文档完全替换匹配的文档。这适用于大规模式迁移的情况。例如对下面的用户文档做
一个比较大的调整
> db.user.find().pretty()
{
    "_id" : ObjectId("5a5b3a74c126b4b2cbb57e3f"),
    "name" : "egon",
    "girl_friends" : 33,
    "wives" : 23
}


# 先找到要修改的对象
> var egon=db.user.findOne({'name':'egon'})
> egon
{
    "_id" : ObjectId("5a5b3a74c126b4b2cbb57e3f"),
    "name" : "egon",
    "girl_friends" : 33,
    "wives" : 23
}
# 修改
> egon.ralationship={'girl_friends':33,'wives':23}
{ "girl_friends" : 33, "wives" : 23 }
> egon.username=egon.name
egon

# 删掉没有用的
> delete egon.girl_friends
true
> delete egon.wives
true
> delete egon.name
true

# 完成更新
> db.user.update({'name':'egon'},egon)
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.user.find()
{ "_id" : ObjectId("5a5b3a74c126b4b2cbb57e3f"), "ralationship" : { "girl_friends" : 33, "wives" : 23 }, "username" : "egon" }

简单更新

删除:

db.userinfo.deleteOne({ 'is_sb': true }) #删除多个中的第一个
db.userinfo.find()
db.userinfo.deleteMany( { 'x'': 1 } ) # 删除x=1的全部
db.userinfo.deleteMany({}) #删除全部

 

posted @ 2018-01-15 17:33  hello沃德  阅读(142)  评论(0)    收藏  举报