mongodb一些常用语法

Mongodb基本语法:

Mongo使用数据库

Mongod开机

Mongoimport导入数据

Nosql:非关系型数据库,mongodb是其中一个

[if !supportLists]1、[endif]通过Mongo连接,默认连接的是test数据库(这个数据库不可删,是mongodb安装的时候自带的)

[if !supportLists]2、[endif]mongodb与其他数据库相比,关系型数据库必须创建表和字段,否则无法使用

但是mongodb属于“无状态模式”,结构不需要设计,直接使用即可,存什么东西取决于我们自己向他传入什么!(当不存在则创建)

由于市场普标称之为表,所以mongodb做了兼容语法处理

显示所有数据库:show dbs / show databases(都是一样的)

显示所有集合/表:show collections / show tables(都是一样的)

显示当前使用数据库:db / db.getName();

数据库状态:db.stats()

资料:https://docs.mongodb.com/manual/reference/command/dbStats/#dbcmd.dbStats

"db" : "dnedu",:表示当前是针对“数据库”的描述

"collections" : 3,:表示当前数据库有多少个collections,当然也可以通过showcollections

"objects" : 14,:表示当前数据库所有collection总共有多少行数据,但是只是一个估计值,并不是非常的精准

"avgObjSize" : 60.142857142857146,:每行数据的大小,也是估计值

"dataSize" : 842,:当前数据库所有数据的总大小

"storageSize" : 90112,表示当前数据库占有磁盘大小,单位bytes

"numExtents" : 0,:包含所有集合中数据库中扩展数量的计数

"indexes" : 3,

"indexSize" : 90112,

"ok" :1

[if !vml]

[endif]

控制台运算

[if !vml]

[endif]

写入数据:

一:普通数据添加方式:

插入数据是咱们熟悉的“json”格式,而在mongodb实际上使用的语法称之为”bson”

BSON()是一种类json的一种二进制形式的存储格式,简称Binary JSON,它和JSON一样,支持内嵌的文档对象和数组对象,但是BSON有JSON没有的一些数据类型,如Date和BinData类型。

db.product.insert({name:"xiaomi6",price:1999,weight:140,number:40,area:{province:"beijing",city:"beijing"}})

db.product.insert({name:"huawei01",price:2999,weight:120,number:20,area:{province:"shenzhen"}})

当集合(product)不存在则创建一个新的集合,插入的数据格式基本和json一样

[if !vml]

[endif]

二:多维数组对象添加:

db.product.insert({name:"xiaomi6",price:1999,weight:140,number:40,area:{province:"beijing",city:"beijing"}})

三:数组信息的添加

db.product.insert({name:"xiaomi6",price:1999,weight:140,number:40,color:[‘red’,’black’,’yellow’]})

我们不可能一条一条的数据去插入,所以可以直接导入json文件批量插入文档

mongoimport--db dnedu--collection product--drop--file dr.json

注意--drop是先删除后导入,也可以不用--drop不删除直接导入

数据查询:

笼统查询:

查询所有数据:db.product.find()

[if !vml]

[endif]

查询第一条数据:db.product.findOne();

[if !vml]

[endif]

条件限制查询:db.product.find({name:"huawei01"})

类似于Mysql命令:select * from表名where name = “huawei01”

[if !vml]

[endif]

[if !vml]

[endif]

ID:id的字段内容值是mongodb本身算法获得的,该_id对应的值信息在“全球唯一”,相当于Mysql当中的主键id,是唯一的,该id可以自行设置,但是不推荐

范围查询

关键字:$gt$lt$gte$lte

Mongodb里面的字段单引号和双引号都可以,随意,只是在PHP由于会把$解释运行,所以php不行

查询price大于2500的数据db.product.find({price:{'$gt':2500}})

[if !vml]

[endif]

查询price小于2500的数据db.product.find({price:{'$lt':2500}})

[if !vml]

[endif]

设置多个查询条件

查询price大于2500,weight小于100的数据

db.product.find({price:{'$gt':2500},weight:{'$lt':100}})

[if !vml]

[endif]

查询price大于2500,weight等于20的数据

db.product.find({price:{'$gt':2500},weight:20})

[if !vml]

[endif]

多维字段查询

查询area里面的province等于changsha

db.product.find({'area.province':"changsha"})

[if !vml]

[endif]

数组条件查询

查询color带有red的数据(包含一个)

db.product.find({color:’red’});

[if !vml]

[endif]

查询color带有red和black的数据(必须包含两个)

db.product.find({color:{‘$all’:[‘red’,’black’]}})

自己扩展db.product.find({color:{‘$all’:[{a.name:”huawei”},{b.color:”blue”}]}})数组套对象

db.product.find({color:{‘$all’:[[“red”,”blue”

]])数组套数组

[if !vml]

[endif]

$or,多个条件,满足其一即可

price等于3000或number小于100

db.product.find({'$or':[{price:3000},{number:{'$lt':100}}]})

[if !vml]

[endif]

限制查询字段

查询数据price等于3000,数据只显示name

db.product.find({price:3000},{name:1}),这条语句有id

db.product.find({price:3000},{name:1,_id:0}):这条语句真的就只有name字段了

1.表示查询显示此字段0.表示排除不显示此字段

如果你需要,比如name为1,price为0,那么会报错,因为mongodb的规则(可以都为1,页可以都为0)就是要输出就全部输出,要么不输出就全部不输出,_id除外,可以随意设置0,1,

db.product.find({price:3000},{name:1,price:0,_id:0})

[if !vml]

[endif]

修改数据

关键字:$set

修改name等于huawei06的字段,但只修改了一条

db.product.update({name:"huawei06"},{'$set':{name:"updatebefore name"}});

[if !vml]

[endif]

如果修改语句中,没有$set,会导致删除其他除id外的所有字段,然后保留我们自己设置的字段,会有下面这张黑图的字段变为下面的图片所剩的字段

[if !vml]

[endif]

[if !vml]

[endif]

如果修改的字段没有则创建,如果执行以下命令

db.product.update({name:"huawei07"},{history:"idon't know"})

[if !vml]

[endif]

上面这条语句会删除其他除id以外的所有字段,然后创建hisotry字段

删除数据:删除所有name等于huawei03的数据

db.product.remove({name:"huawei03"})[if !vml]

[endif]

删除字段:db.product.update({name:"huawei04"},{'$unset':{name:1}});,只会删除一条

[if !vml]

[endif]

模糊查询

collection.find({name: new RegExp("^.*"+name+".*$")})

查询大于小于不等于

$gt $gte $lt $lte $ne

查询表信息

db.table.status()

db.table.status().count//表的个数

查询的数据长度

count =db.table.find().count();

数据量小的分页查询

db.user.find({name:/^zhangsan2/}).sort({"index":-1}).skip(110).limit(10)

数据量大查询分页(优化)

db.user.find({name:/^zhangsan2/,index:{"$lt":299890}}).sort({"index":-1}).limit(10)

查询后排序

db.user.find({name:/^zhangsan2/}).sort({"index":-1})

查看一个查询(find)的explain()输出信息,可以知道查询使用了哪个索引,以及是如何使用的。

db.users.find({gender:"M"},{user_name:1,_id:0}).explain()

查询num的数组值具有指定大小的document

最好的方法是使用$size,例如指定大小为2,可以:

复制代码代码如下:

db.data.find({num:{$size:2}})

不过$size有一个缺陷,就是无法查询某个范围的大小,例如下面的语句是无法按照预期运行的:

复制代码代码如下:

db.data.find({num:{$size:{$gt:2}}}); //错误

官方文档中建议,如果需要查询的数组大小在某个范围,可以另外为每个文档添加一个键来保存当前数组的大小。

如果数组大小是某个范围

另外两种思路,第一个思路是使用$where,例如如果要求数组大小小于3:

复制代码代码如下:

db.data.find({ $where:"this.num.length < 3" })

这种方法具有很大的灵活性,但是速度会慢一些。

关于$where,请参考官方文档:http://docs.mongodb.org/manual/reference/operator/query/where/。

另外一个比较高效的方法是判断数组中的某个指定索引的元素是否存在,例如如果要求数组大小小于3:

复制代码代码如下:

db.data.find({ "num.2":{$exists:0} })

数组大小小于3,就意味着num[2]不存在。

如果要求数组大小大于3,可以:

复制代码代码如下:

db.data.find({ "num.3":{$exists:1} })

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,711评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,932评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,770评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,799评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,697评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,069评论 1 276
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,535评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,200评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,353评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,290评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,331评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,020评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,610评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,694评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,927评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,330评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,904评论 2 341

推荐阅读更多精彩内容