MangoDB

连接数据库:

mongo 数据库名不填数据库,名默认为test

常用命令:

show dbs;显示出可用数据库的名称

show collections;显示出当前数据库中的集合

show users;显示出当前数据库中的用户

use 切换当前正在使用的数据库

管理员执行命令:

db.adminCommand({"命令","value"})

创建集合:

db.createCollection("集合名");

db.createCollection("集合名",capped:true,size:number,max:number)

创建固定集合,capped 是否固定集合;size文档存储大小,单位为字节;max为文档最大数量,number为整数,无论哪个先达到限制都会删除最先的文档

查看当前数据库现有集合:

db.getCollectionNames();

访问已经创建的集合

db.CollectionName;

查询文档:

db.集合名.find()返回一个集合,需要下标引用

db.集合名.findOne()仅查看第一个符合条件的文档

创建集合:

db.createCollection("collectionName");

删除集合:

db.collectionName.drop();

db.runCommand({"drop":"collectionName"})

添加文档:

var obj = {"key1":111,"key2":222};

db.集合名.insert(obj);

更新文档:

print(book);//可省略

book.comments=[];

删除文档:

MongoDB数据类型:

String包含一串文本,用于存储文本值。使用utf-8编码

Booleanflase 和 true

数值类型:

Double用于存储浮点数,shell默认使用64位浮点数存储数值

Integer(32位和64位)

用于存储整数

Array用于存储数组

Object用于存储内嵌文档,内嵌文档作为父文档

Null专门表示空值

Date存储1970年1月1日点

连接数据库:

mongo ip或主机名:port/数据库名

无连接启动

mongo -nodb;

无连接启动后,手动链接数据库

conn=new Mongo("ip或主机名:prot")

db=conn.getDB("数据库名")

执行脚本

mongo ip/主机名:prot/数据库名 js文件路径

sheel对应的javascript函数

use db ---->db.getSisterDB("db")

show dbs--->db.getMongo().getDBs()

show collectionsdb.getCollectionNames()

使用脚本注入变量和函数

在连接sheel后使用load(src)

创建新数据库:

use databaseName

db.createCollection("myName");

ps:只有往数据库里面添加一条数据新的数据库才会创建

删除数据库:

db.dorpDatabase();

在mongoSheel中加载js文件:load("path")

查找:

比较操作符 : $lt,$lte,$gt,$gte,$eq ,等操作符分别对应 , >= , =

用法: find(})

$in , 专门匹配一个键的值是否为指定的多个被选值中的一个 , 用法: find({ 键:{ $in : [值1,值2,值3,...] } })

$nin, 专门匹配一个键的值是否不在指定的多个被选值列表中, 用法如上。

$and , 专门匹配一个条件数组中的所有条件,用法 : find({$and:[{,,键:值},...]})

$or , 专门匹配一个条件数组中的任意一个条件,用法 : find({$or:[{,,键:值},...]})

$not , 可用在任意条件前,匹配不满足指定条件的文档 , 用法: find({ 键:{$not:} })

值为null,同时兼具两层意思:键的值等于null,或者键不存在

$exists , 专门用于判断指定键是否存在,用法: find({ 键:{ $eq:null, $exists:true }});

find({"键.i":值}) ; 匹配数组指定位置的值

$all , 专门比较一个数组类型的键中是否包含所有指定元素, 用法: find(})

$size , 查询特定长度的数组,用法: find(}) ,ps:$size 不支持比较操作符

$slice , find函数第二个参数 , 专门用于截取返回数组中指定位置的子数组, 用法: find(,}) ; ps: 特殊用法: find(,}) ,截取开头的n个元素 ; find(,}) , 截取结尾的n个元素

注意:

$gt或者$lt在比较数组时,$gt或$lt同样也会比较数组中的元素,并且还是用OR的关系

解决1: $elemMatch, 专门用于要求必须用两个边界条件,同事匹配一个数组元素,且只能匹配数组元素,用法: find(}})

解决2:利用查询结果的min和max函数,但查询建上必须创建索引才可用, 用法: find({}).min().max() , ps: min和max比$比较符效率高

更新修改器:

update:

$set:标识修改已有的键的值,用法: db.collectionName.update(,{$set:})

$inc:专门用于增加或减少一个键的值,通常用于需要累加或者不断增减的值,只能用于整数和浮点数,不能用于其他类型,用法: db.collectionName(,{$inc:})

$push:用于向数组中追加一个新元素,如果数组不存在则创建数组,用法:db.collectionName.update(,{$push:});

$each:相当于散列,把值打散一个一个复制到value中,常用于数组修改$push,用法:db.collectionName.update(,{$push:}})

$slice:专门用于截取数组中指定个数的元素长度,n为正数时从数组前面截取,负数时从数组尾部截取,用法:db.collectionName.update(,{$push:}})

$sort:专门用于,在最佳新数组元素厚,对数组内容排序,n为1则为升序,n为-1则为降序,用法:db.collectionName.update(,{$push:}})

$ne:用于判定数组中是否已经包含了指定元素,只有数组中不含有指定元素才会把指定元素添加到数组中,用法:db.collectionName.update({ base:val,key:{$ne:value}},{$push:});

$addToSet:用法和$push一样,但$addToSet只添加数组中不存在的元素,用法: db.collectionName.update(,{$addToSet:}})

$pop:专门用于从数组的开头或者结尾删除一个元素,n为1则表示删除结尾最后一个元素,为-1则删除开头的第一个元素,用法:db.collectionName.update(,{$pop:})

$pull:专门用于删除数组中所有指定内容匹配的元素,用法:db.collectionName.update(,{$pull:});

upsert:

$setOnInsert:在upsert插入时,补充缺少的键,可以同时使用$setOnInsert修改器,用法:db.collectionName.update(,},true);

匹配内嵌文档: find({ "键.内嵌文档键":值 })

$where,万能匹配,但不安全,甚至需要禁用,执行效率慢并且不能使用索引,用法:

db.collectionName.find({$where:function(){

获取当前文档对象(this)

根据判断条件,返回true,达到选择符合条件的元素的目的

}});

查询并修改:

db.collectionName.findAndModify({

query:,

sort:,

update:,

new:true,//但会修改后的新文档

})

原子操作,避免竞态

数组操作:

key="arr.num",num为数字或者键名

upsert

update还有第三个参数,意为upsert,表示更新或者插入的已死,默认为false,表示不自动创建。设置upsert:db.collectionName.update(,true});

save

只要希望将文本整体更新回集合时,也启用upsert方式,就可以用save函数优化代码,用法:db.collectionName.save(obj);

原理:如果要保存的文档包含_id,则使用_id查找是否已存在,然后执行并设置upsert,如果文档不包含_id,则执行insert操作,直接插入文档

查询最后一次操作的信息:db.runCommand();

updateMany

update的第四个参数,如果将update的第四个参数设置为true,则开启修改多条记录方式,用法:db.collectionName.update(,,true,true);

findAndModify

可以一句话完成查找和修改功能,避免竞态。用法:db.findAndModify{ query:,sort:,update: };

findAndModify可以返回更新命令的旧值,可设置返回新的值,需在findAndModify中添加new:true

查询文档

find函数查询文档中的简直不能引用文档内的另一个键值,例如:

find函数的第二个参数,指定要返回的键值,其中值为1的键,表示要返回的。值为0表示不返回的,例如: find(,{ key:1,key:0 })

比较运算符: $lt=> 少于 ,$lte=> 少于等于 ,$gt=> 大于 ,$gte=> 大于等于 ,$eq=> 等于 , $ne =>不等于

OR查询:$in,专门匹配一个值是否为指定的多个被被选值中的一个;$nin,专门匹配一个键的值是否不在指定的备选列表中;用法:find(key : { $in / $nin : [ value1 , value2 .....]})

查询选项:

db.collectionName.find()._addSpecial("name":n);

name: $maxScan,仅在前n个文档内扫描符合条件的文档,查询效率高,单可能不完整

#min/$max,相当于$gt,$lt,后跟一个键值对

游标:

var cursor = db.collectionName.find();

cursor.hasNext();判断有没下一条

cursor.next();获取下一条

cursor.forEach(function(value))游标遍历函数

cursor.immortal()告诉服务器不要让游标超时,但必须遍历完才能自动释放

索引:

db.collectionName.ensureIndex({"key":1/-1})

其中1标识索引中键的值按升序排序,降序为-1

db.collectionName.ensureIndex({"数组键.内嵌文档的键":1});

内嵌文档索引

db.collectionName.getIndexes();

查看集合内的键建立的索引

db.collectionName.dropIndex("key");

删除key键的索引

db.collectionName.ensureIndex({"key":1/-1},)

唯一索引

db.collectionName.ensureIndex({"key":1/-1},)

稀疏索引,如果插入文档中不包含索引的键,则该文档不在加入到索引中

{

unnique:true,//建立唯一索引

sparse:true,//建立稀疏索引

name:"name",//自定义索引名,默认索引名:键_排序方向_键2_排序方向

background:true,//以后台方式建立索引,不影响正常插入修改删除等操作

}

常用:

var col = db.collectionName.find();

col.explain("executionStats"),专门用于显示一个查询的计划和执行时间

totalDocsExamined属性:扫描文档总数

executionTimeMillis属性:查询小号的毫秒数

查询返回仅需要的键:

db.collectionName.find(,)

1为返回,0为不返回,_id默认返回

查看操作信息

db.runCommand(option)

option:

getLastError:1, 查看最后一次操作的信息

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180927G1M4SF00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券