mongodb word 笔记

来源:互联网 发布:sql union join的区别 编辑:程序博客网 时间:2024/06/04 19:18

安装:

下载包解压bin

创建一个data文件

进入cmd 用cd进入到bin目录下

运行: mongod --dbpath  e:\star\mongodb\data  开启数据库

 

 

 

命令链接数据库

当运行完上边的指令开启完数据库后。再打开一个cmd bin

Mongo   127.0.0.1:27017  

//链接本地端口的数据库 也可以链接远程的。链接本地时可不用写地址

这时运行的是默认的test数据库。我们肯定是要运行自己的数据库的

Use databasename  //运行此命令切换或创数据库

这时才能用查询等 命令

 

服务器开始用户验证

1、需要创建一个mongodb.conf,介意放mongodb文件夹下。它是用来配置起动服务的。

2、配置

##store data here

dbpath=E:\star\mongodb\data //数据库地址

port=27017 //端品

##all output go here

logpath=E:\star\mongodb\log\mongo.log//日志地址,需要有logo文件夹才可

logappend=true //日志输出方式

auth=true//启用验证

//当然mongodb还有很多启动参数。

3、通过conf启动:cmdbin目录下 运行

Mongod  -config  conf的目录,可以是相对也可以是绝对地址.

4、cmd命令访问数据库,还是和原先一样mongo  user databasename

5、通过mongoVUE  链接:这时就需要配置用户名和密码了。

6、Node mongoose 链接

以前直接mongoose.connect("mongodb://localhost/nodejs")就可以了

但现在需要:

mongoose.connect('mongodb://'+db.user+':'+db.pwd+'@localhost/nodejs')

补充:要开启用户验证,先需要创建用户。

    

 

 

 

数据库操作命令

Show tables  //显示所有表

Show collections  //同上

show dbs //打印出所有数据库和使用大小

db.getName() //查看当前使用的数据库

db.repairDatabase() //修复数据库

db.copyDatabase(‘name’,’temp’) /拷贝数据库

db.copyDatabase(‘mydb’,’temp’,’127.0.0.1’) //本地mydb数据库数据复制到temp数据库中

db.dropDatabase() //删除数据库

db.printReplicationInfo()  //查看主从复制状态

db.cloneDatabase(‘127.0.0.1’) //从指定的服务器数据库克隆数据到当前数据库

db.stats() //显示当前db状态

db.version()  //当前db版本

db.getMongo()  //查看当前db的地址和端口

db.killOp()//停止(杀死)在当前库的当前操作

 

 

 

 

 

 

数据库用户操作

db.addUser(‘name’,’pwd’,bool) //增加或修改用户 bool 是否只读

db.system.users.find()  //查看所有用户

Show users  // 查看所有用户

db.auth(‘name’,’pwd’) //用户证认判断是否正确

db.removeUser(‘name’) //删除用户

 

 

Collection 操作

db.coll.remove() //删除所有记录

db.createCollection(‘name’,{}) //创建一个集合

db.getCollectionNames() //得到所有cell名字

db.printCollectionStats() //查看 所有coolection 状态

db.coll.help() //集合帮助

db.coll.count() //数据条数

db.coll.dataSize() //空间大小

db.coll.totalSize() //总大小

db.coll.storageSize()//储存空间大小

db.coll.renameCollection(‘newname’)//coll重命名

Db.coll.drop()//删除当前coll

Db.coll.distince(‘colname’) //显示指定列的所有值去掉重复的

 

 

 

 

数据库导出导入

需要先启动数据库,进到bin:

Mongodump -d nodejs  -o e:/     //导出nodejs数据库到e:/

mongodump -h IP --port 端口 -u 用户名 -p 密码 -d 数据库 -o 文件存在路径

如果没有用户谁,可以去掉-u-p

如果导出本机的数据库,可以去掉-h

如果是默认端口,可以去掉--port

如果想导出所有数据库,可以去掉-d

 

数据库还原

mongorestore -h IP --port 端口 -u 用户名 -p 密码 -d 数据库 --drop 文件存在路径

mongorestore -d tank /home/zhangy/mongodb/tank/  #tank这个数据库的备份路径 

 

 

 

 

工具:

print()//打印数据

printjson()打印对象转换成字符串

 

mongo  命令

语法:

1:db.admin.update(条件对象,修改对象,upsert,multi)

upsert: bool类型,如果不存在记录,是否插入,truefalse否,默认false

multi:bool类型,是否更新查出的所有数据,默认false只更新第一条

db.admin.save(obj)

如果命令中有相同_id的obj就更新,没有就插入

 

 

 

 

查看聚集集合基本信息

db.admin.count()//返回admin的条数

db.admin.dataSize()//返回集合占用空间大小

db.admin.stats()//返回集合状态

db.admin.getDB()//返回当前集合所在数据库名

db.admin.totalSize()//返回聚集集合总大小

db.admin.storageSize()//返回聚集集合储存空间大小

db.admin.renameCollection('admins')//修改集合名

db.admin.drop()//删除当前集合

db.createCollection('a')//创建集合a

 

聚集集合查询

db.admin.distinct('name')//过滤掉相同的name字段,返回数组

db.admin.find().sort({name:1})//按name 升序

db.admin.find().limit(2) //返回前2条数据

db.admin.find().skip(2)//查询2条以后的数据

 

索引

 

游标

var cursor=db.admin.find();

while(cursor.hasNext()){

    print(cursor.next())

}

db.admin.find().forEach(function(x){

   print(x);

}

 

进入bin目录,输入mongo ,回车,就可以使用以下命令了

1:配置当前数据库

use  数据库名  //配置当前db访问的数据库

2:插入数据insert

db.admin.insert({name:'bb',pwd:'star'})   //向admin集合中插入文档

3:查询find

db.admin.find()  //查询集合,返回符合的数据,默认返回所有

db.admin.find()[0].name   //用[]下标来访问返回的第几行文档,用.nam来访问属性

db.admin.find({name:/b*/})  //条件以对象来写,可以用到正则

db.admin.findOne()   //返回结果的第一条数据  

4:更新update()

db.admin.update({name:'star'},post)   //第一对象为限定条件,第二对象为新文档

当修改匹配了多个文档时会发生错误,因为_id每个文档都是唯一的

5:删除remove()

db.admin.remove({pwd:'33'}) // 删除pwd等于33的所有文档

db.admin.remove()   //删除所有文档,保留集合和索引

6:db.getCllection('name')  //当表名和保留名一至时,用getCollection来访问

7$inc    用于数字增加,没有此属性会添加并赋值

db.admin.update(条件,{'$inc':{'num':3}})  

 //符合的文档的num属性都加上3没有此属性设置值为3

8:$set    用于指定属性的值,不存在创建,存在修改 可以改变值的类型,如以前是字符串可修改成数据

db.admin.update(条件,{'$set':{'book':'js'}})   //创建book  为js

9:$unset   删除属性,打印时就不会有此属性

db.admin.update(条件,{'$unset':{'book':1}})   //删除book属性

10: $push  数组添加

db.admin.update(条件,{'$push':{'book':'33'}})  //book数组push '33'

只能对已有的数据属性操作,没有属性会错误

$pushAll   一次添加多个值到数组

{'$pushAll':{'book':['11','22','33']}}

11:$addToset   //数据添加时避免重复

db.admin.update(条件,{'$addToSet':{'book':'net'}})

db.admin.update(条件,{'$addToSet':{'book':{'$each':['net','bb']}}})  //添加多个数据

12:$pop   //删除数据元素

db.admin.update(条件,{'$pop':{'book':-1}})  //-1删除头部第一条 1 删除最后一条

13:$pull  //删除所有匹配的部分

db.admin.update(条件,{'$pull':{'book':'33'}})  //删除book数据中的33

$pullAll  //一次删除多个匹配的值

{'$pullAll':{'book':['11','22]}}

14:数据定位修改

db.admin.update(条件,{'$inc':{'message.0.num':10}})  

//把message数组中下标为0的对象的num增加10

有时查询的结果并不清楚下标是几,可以用$来表示当前结果的下标

15:save   修改数据

var po=db.admin.findOne();

po.num=10;

db.admin.save(po) //保存数据

 

 

第四章 查询

4.1指定返回的键

db.admin.find({},{'name':1,})  //返回name

db.admin.find({},{'book':0})  //不返回book

4.2查询条件( 一般写在属性的值中)

$lt:  <     $lte:  <=   $gt: >      $gt3: >=   $nc:不等于  

$in:数组形式的或  $nin:  返回与数组中不匹配的(值必须为[])    

$mod:[除数,余数]  某键除以除数,返回余数等于指定的值

$exists:true/false  用于判断键是否存在

db.admin.find({'num':{'$gt':3,'$lt':10})  //大于小于10

db.admin.find({'num':{'$ne':10.0})//  num 不行于10.0

4.3or 查询

db.admin.find({'name':{'$in':['a','b'}})  //返回name为a 或b  

//$in 用于检测字段的多个值,$in参数为数组,不可用于数组

db.admin.find({'name':{'$nin':['a','b'}})  //返回name 不等于a 和b 。

$in 能对单个键做or查询,想要找到name为a  或num为10,就要用到$or。or接受一个包含所有可能条件的数组作为参数.

db.admin.find({'$or':[

   {'name':'a'},

   {'num':3.0}

]})//返回name 为a或num 为3.0的值

$or 数组中的对象中的键可是为值,也可是条件对象

db.admin.find({'$or':[

    {'num':10.0},

    {'name':{'$in':['a','b']}}//在or数组对象中用到条件查询。

]})

4.4  $not(元条件)用在任何条件之上

db.admin.find({'name':{'$not':{'$in':['bb']}}})

not 不能直接在后边引用字符串,必须是一个条件的对象{'$in':['bb']} ,或一个正则:

db.admin.find({'name':{'$not':/b/i}})

如果想返回name 不等于bb用:

db.admin.find({'name':{'$ini':['bb']}})

4.5条件句的规则

查询中条件如'$lt'用在内层文档,更新中的$inc  $set  用在外层文档

 {'num':{'$lt':30}}    {'$inc':{'num':3}}

条件句是内层文档的键,修改器则是外层文档的键。

一个键可以有多个条件,但不能对应多个更新修改器,

4.6特定于类型的查询

null 可以匹配键中的null,当没有此键时会匹配所有内容

db.admin.find({'num':null})  //返回num为null

db.admin.find({bb:null})  //当都没有bb键时返回所有

可以用$exists 来判断键是否存在

db.admin.find({bb:{'$in':[null],'$exists':true} }) //当有bb键时再判断是否值为 null

4.7正则

db.admin.find({'name':/bb/})  

4.8查询数组

//单一:查询数据中有net 的返回

db.admin.find({'book':'net'})

//多一:查询包含net&&  bb 的返回,用的是$all条件

db.admin.find({'book':{'$all':['net','bb']}})

//如果确定匹配也可以用

db.admin.find({'book':['net','bb']})

//匹配数组位数为指定值

db.admin.find({'book.1':'bb'})

//匹配数组长度 $size:数字  不可和$lt 比较大小一起用,

db.admin.find({'book':{'$size':3}})

//$slice  用于第二个参数,用来确定数组要显示的个数正数为前多少,负数为后多少。

{'$slice':[,index,length])  二参:index 从第位下标后开始,length 返回的长度

db.admin.find({},{'book':{'$slice':2}})

4.9查询内嵌文档

可以用{'name.first':'star'} 或{'name':{'first':'star}}

$elemmatch 模糊命名条件用来部分指定匹配数组中的单个内嵌文档的限定条件,

 

{'message':{'$elemmath':{

    'author':'star',

    'score':{'$gte':5}

}}}

//返回留言为star,且数量大于等于5的返回。

4.10$where

 

 

0 0
原创粉丝点击