MongoD 语法

1.常用

1 .查看有哪些库

> show dbs;
admin 0.000GB
config 0.000GB
local 0.000GB

2 .当前库,只存在于内存中

> db
test

3 .查看当前库有哪些表 tables 或集合collections

> show tables;
> show collections;

4 .隐式创建表和插入数据(创建表c1 ,并向内部插入两条数据)

    - db.c1.insert({k1:"V1",k2:"V2"})
> db.c1.insert({name:"jack",age:10})
> db.c1.insert({address:"beijing"})

5 .查看表中数据(查看当前库,c1表中 全部数据)

> db.c1.find()
{ "_id" : ObjectId("5bdbfad85f97280919da4bb5"), "name" : "jack", "age" : 10 }
{ "_id" : ObjectId("5bdbfbe85f97280919da4bb6"), "address" : "beijing" }

6 .创建库db1

> use db1

7 .向库中创建集合后,该库才会真正被创建

> db.c2.insert({name:"user01"})

8 .删除当前所在的库(db1)

> db
db1
> db.dropDatabase()
{ "dropped" : "db1", "ok" : 1 }

9 .帮助

> db.c1.help()

10 .显式创建集合无需插入数据

    - db.createCollection("集合名称")
> db.createCollection("c2")
{ "ok" : 1 }
> show tables;
c1
c2

11 .删除指定的集合 c2

> db.c2.drop()
true

2.增加

1 .通过 JavaScript JS 语句向db2表中插入 100W数据

> for(var i=0;i<1000000;i++){ db.c2.insert({name:"user"+i,age:i,addr:"addr"+i});}

2 .隐式创建一个集合,直接插入数据

db.c2.insert({name:"rose",age:20,addr:"beijing"})

3 .显式创建集合无需插入数据

   - db.createCollection("集合名称")
> db.createCollection("c2")
{ "ok" : 1 }

4 .创建固定集合【可用于日志存储,指定大小,指定条数】

    - 指定集合大小,指定集合文档的数量;哪个值先达到按照哪个值限制。
- db.createCollection("集合名称",{capped:true,size:大小kb,max:条数}) > db.createCollection("c3",{capped:true,size:100,max:10})
{ "ok" : 1 }

5 .修改集合大小,以及条数

> db.runCommand({convertToCapped:"c3",size:1000,max:10})
{ "ok" : 1 }

3.删除

1 .删除一张表里的所有内容

> db.c2.remove({})
WriteResult({ "nRemoved" : 1000001 })

2 .删除指定的数据 "name":"jack" 或 _id 或 ObjectId("5bdbfbe85f97280919da4bb6")

> db.c1.remove({"name":"jack"})
> db.c1.remove({"_id" : ObjectId("5bdbfbe85f97280919da4bb6")});

3 .删除 [{name:"u01"}或者{age:8}]

> db.c1.remove({$or:[{name:"u01"},{age:8}]})
WriteResult({ "nRemoved" : 2 })

4 .删除指定的集合 c2 (等同于删除一张表)

> db.c2.drop()
true

5 .删除当前所在的库(db1)

> db
db1
> db.dropDatabase()
{ "dropped" : "db1", "ok" : 1 }

4.查询:

4.1常用查询

1 .查看c2集合中一共有多少条数据

> db.c2.find().count()
1000001

2 .通过find() 查询时,默认展示20条数据 【通过 it 命令展示下 20条数据】

> db.c2.find()
{ "_id" : ObjectId("5bdc0387b377cd238feceda5"), "name" : "rose", "age" : 20, "addr" : "beijing" }
... ...
{ "_id" : ObjectId("5bdc04d0b377cd238fecedb8"), "name" : "user18", "age" : 18, "addr" : "addr18" }
Type "it" for more

3 .查询出集合中第一条数据 findOne

> db.c1.findOne({})
{
"_id" : ObjectId("5bdc2282b3d6a80c63a9a4a5"),
"name" : "user0",
"age" : 0
}

4 .只查询集合中的指定字段

    - {}    第一个花括号 表示针对所有的数据
- {name:1,_id:0} 第二个花括号,表示要显示的内容 【非0即为真,为0 时表示不显示 指定的字段 】
name:1 表示显示 name 字段
_id:0 表示不显示 _id 字段 > db.c1.find({},{name:1,_id:0})
{ "name" : "user0" }
... ...
{ "name" : "user19" }
Type "it" for more

4.2条件表达式:

语法:

db.tables.find({},{})
- {} 第一个花括号 放显示条件 空为所有值
大于:key > value {key:{$gt:value}}
小于:key < value {key:{$lt:value}}
大于等于:key >= value {key:{$gte:value}}
小于登录:key <= value {key:{$lte:value}}
不等于:key != value {key:{$ne:value}}

1 .查询出年龄小于10岁的名字和年龄 不显示 _id

> db.c1.find({age:{$lt:10}},{_id:0})
{ "name" : "user0", "age" : 0 }
{ "name" : "user1", "age" : 1 }
{ "name" : "user2", "age" : 2 }
{ "name" : "user3", "age" : 3 }
{ "name" : "user4", "age" : 4 }
{ "name" : "user5", "age" : 5 }
{ "name" : "user6", "age" : 6 }
{ "name" : "user7", "age" : 7 }
{ "name" : "user8", "age" : 8 }
{ "name" : "user9", "age" : 9 }

4.3常用统计值:

统计语法:

    统计(count)、排序(sort({}))、skip() 跳过多少行、limit() 显示多少行

    db.table.find({},{}).count()    # 统计条数
db.c1.find().sort({age:-1}) # 根据 age 字段排序 1为正序 -1 为倒叙
db.c1.find().skip(6).limit(5) # skip(6) 跳过前 6 条数据,limit(5) 显示接下来的 5 条数据

1 .查看age 不等于10的有多少条

    > db.c1.find({age:{$ne:10}},{}).count()
99

2 .当find()查询所有值,conut 默认统计所有,如果显示实际展示条数 count(1)

> db.c1.find().skip(6).limit(5).count()
100 > db.c1.find().skip(6).limit(5).count(1)
5

3 .根据age 字段排序,-1 按照倒叙方式排列 sort内部使用的为 json 串sort.({age:-1})

> db.c1.find().sort({age:-1})

4 .查询 数据 6-10 条数据

> db.c1.find().skip(6).limit(5)
{ "_id" : ObjectId("5bdc2282b3d6a80c63a9a4ab"), "name" : "user6", "age" : 6 }
{ "_id" : ObjectId("5bdc2282b3d6a80c63a9a4ac"), "name" : "user7", "age" : 7 }
{ "_id" : ObjectId("5bdc2282b3d6a80c63a9a4ad"), "name" : "user8", "age" : 8 }
{ "_id" : ObjectId("5bdc2282b3d6a80c63a9a4ae"), "name" : "user9", "age" : 9 }
{ "_id" : ObjectId("5bdc2282b3d6a80c63a9a4af"), "name" : "user10", "age" : 10 }

4.4 $查询:find

数组查询:$all $in $nin

#语法:
$all 查询数组中 精确包含
> db.c1.find({数组:{$all:[精确包含值一,精确包含值二,精确包含值三]}})

1.向c1集合中插入三条数组 [1,3,5]

> db.c1.insert({name:"zhangsan",age:18,hobby:["basketall","pingpong","football","volleyball"]})
> db.c1.insert({name:"lisi",age:28,orders:[1,2,3,4,5]})
> db.c1.insert({name:"lisi",age:28,orders:[1,2,3,4]})

2.查询出 orders 数组中包含 [1,3,5] 的数据 和 hobby 数组中包含 ["basketall","football"] 的值

> db.c1.find({orders:{$all:[1,3,5]}})
{ "_id" : ObjectId("5bdc3488b3d6a80c63a9a50c"), "name" : "lisi", "age" : 28, "orders" : [ 1, 2, 3, 4, 5 ] } > db.c1.find({hobby:{$all:["basketall","football"]}})
{ "_id" : ObjectId("5bdc33f3b3d6a80c63a9a50b"), "name" : "zhangsan", "age" : 18, "hobby" : [ "basketall", "pingpong", "football", "volleyball" ] }

数组查询: $in

#语法:
$in 匹配任意值即可
> db.c1.find({数组:{$in:[任意一,任意二,任意三]}})

1 .查看 orders 数组中包含有 [1,3,5,1000] 任意值的数据

> db.c1.find({orders:{$in:[1,3,5,1000]}})
{ "_id" : ObjectId("5bdc3231b3d6a80c63a9a50a"), "name" : "user01", "age" : 10, "orders" : [ 1, 2, 3, 4 ] }
{ "_id" : ObjectId("5bdc3488b3d6a80c63a9a50c"), "name" : "lisi", "age" : 28, "orders" : [ 1, 2, 3, 4, 5 ] }

数组查询: $nin

#语法:
$nin 与 $in 相反
> db.c1.find({数组:{$nin:[任意一,任意二,任意三]}})

1 .查看 orders数组 中不包含 [5,1000] 的数据

> db.c1.find({orders:{$nin:[5,1000]}})
{ "_id" : ObjectId("5bdc3231b3d6a80c63a9a50a"), "name" : "user01", "age" : 10, "orders" : [ 1, 2, 3, 4 ] }
{ "_id" : ObjectId("5bdc33f3b3d6a80c63a9a50b"), "name" : "zhangsan", "age" : 18, "hobby" : [ "basketall", "pingpong", "football", "volleyball" ] }

4.5Key 查询:

LIKE模糊查询

#语法:
/V/ # 包含V
/^V/ # 依照 V 开头的
/V$/ # 依照 V 结尾的 > db.c1.find({key1:/V/})

1 .查询出 name 字段包含 l 的

> db.c1.find({name:/l/})
{ "_id" : ObjectId("5bdc3488b3d6a80c63a9a50c"), "name" : "lisi", "age" : 11, "orders" : [ 1, 2, 3, 4, 5 ] }
{ "_id" : ObjectId("5bdfec5b7be2fc7482d12255"), "name" : "xiaolin" }

2 .查询出 name 字段依照 l 开头的

> db.c1.find({name:/^l/})
{ "_id" : ObjectId("5bdc3488b3d6a80c63a9a50c"), "name" : "lisi", "age" : 11, "orders" : [ 1, 2, 3, 4, 5 ] }

3 .查询出 name 字段依照 i 结尾的

> db.c1.find({name:/i$/})
{ "_id" : ObjectId("5bdc3488b3d6a80c63a9a50c"), "name" : "lisi", "age" : 11, "orders" : [ 1, 2, 3, 4, 5 ] }

$or 匹配多个关系值 或者

#语法:
> db.c1.find({$or:[{key1:"V1"},{"key2":"V2"}]})

1 .查询 name:"lisi" 或者 "hobby":"pingpong" 的值

> db.c1.find({$or:[{name:"lisi"},{"hobby":"pingpong"}]})
{ "_id" : ObjectId("5bdc33f3b3d6a80c63a9a50b"), "name" : "zhangsan", "age" : 18, "hobby" : [ "basketall", "pingpong", "football", "volleyball" ] }
{ "_id" : ObjectId("5bdc3488b3d6a80c63a9a50c"), "name" : "lisi", "age" : 28, "orders" : [ 1, 2, 3, 4, 5 ] }

$nor 与 $or 相反

#语法:
> db.c1.find({$nor:[{key1:"V1"},{"key2":"V2"}]})

1 .查询 不是 name:"lisi" 或者 "hobby":"pingpong" 的值

> db.c1.find({$nor:[{name:"lisi"},{age:18}]})
{ "_id" : ObjectId("5bdc3231b3d6a80c63a9a50a"), "name" : "user01", "age" : 10, "orders" : [ 1, 2, 3, 4 ] }

$and 并且条件 【两个条件都满足

#语法:
> db.c1.find({$and:[{key1:"V1"},{"key2":"V2"}]})

1 .查询{name:"u02"} 并且 {age:10} 的数值

> db.c1.find({$and:[{name:"u02"},{age:10}]})
{ "_id" : ObjectId("5bdfe8e07be2fc7482d12254"), "name" : "u02", "age" : 10, "add" : "bj" }

2 .查询两个时间戳之间的数据总个数

db.c1.find({$and:[{timestamp:{$lt:1535731200}},{timestamp:{$gt:1535731200-86400*31}}]}).count()

$exists 是否包含该字段key

#语法:
> db.c1.find({key:{$exists:0}})

1 .查询出 包含 hobby 字段的数据

> db.c1.find({hobby:{$exists:1}})
{ "_id" : ObjectId("5bdc33f3b3d6a80c63a9a50b"), "name" : "zhangsan", "age" : 18, "hobby" : [ "basketall", "pingpong", "football", "volleyball" ] }

2 .查询出 不包含 hobby 字段的数据

> db.c1.find({hobby:{$exists:0}})
{ "_id" : ObjectId("5bdc3231b3d6a80c63a9a50a"), "name" : "user01", "age" : 10, "orders" : [ 1, 2, 3, 4 ] }
{ "_id" : ObjectId("5bdc3488b3d6a80c63a9a50c"), "name" : "lisi", "age" : 28, "orders" : [ 1, 2, 3, 4, 5 ] }

4.6游标:

将查询结果赋值给 一个变量 通过next 一个一个抛出,全部抛出后在执行next 抛出异常

1 .将集合 c1 中的数据全部赋值给 a1 变量:

> var a1 = db.c1.find()

2 .查看a1变量是否还有数据

> a1.hasNext()
true

3 .从a1变量中抛出一个值

> a1.next()
{
"_id" : ObjectId("5bdc33f3b3d6a80c63a9a50b"),
"name" : "zhangsan",
"age" : 18,
"hobby" : [
"basketall",
"pingpong",
"football",
"volleyball"
]
}

4 .当a1为空时,hasNext 值为 false

> a1.hasNext()
false

5更改:update 【$set 、 $inc】

5.1 $set 修改

#语法:
$set 修改
更新有4个参数:
语法:
db.table.update({criteria},{$set:{objNew}},upsert,multi)
db.集合.update({key1:V1},{$set:{key2:v2}},0,1) 参数说明:
criteria:用于设置查询条件的对象
objNew: 用于设置更新内容对象
upsert: 如果记录已经存在,更新它,否则新增一条记录,取值为 0 或 1 【0存在更新,不存在忽略;1存在更新,不存在增加】
multi: 如果有多个符合条件的记录,是否全部更新,取值为 0 或 1 【0更新第一条,1更新所有符合条件的】

1 .将名字name:"user01" 条件,age 更改为 20

> db.c1.update({name:"user01"},{$set:{age:20}},0,1)
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

2 .将name:"user01",name:"lisi" 的age 更改为 11

> db.c1.update({$or:[{name:"user01"},{name:"lisi"}]},{$set:{age:11}},0,1)
WriteResult({ "nMatched" : 2, "nUpserted" : 0, "nModified" : 2 })

3 .将name:"user01" 添加一个字段 addr

> db.c1.update({name:"user01"},{$set:{addr:"beijing"}},0,1)
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

4 .将name:"user01" 删除一个key字段 addr 【$unset】

> db.c1.update({name:"user01"},{$unset:{addr:1}},0,1)
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

5.2 $int类型加减

#语法:
int类型加减
注:只针对int 类型
语法:
db.table.update({条件},{$inc:{key1:int}},0,1)

1 .将 name:"lisi" 的age 加 1

> db.c1.update({name:"lisi"},{$inc:{age:1}},0,1)
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

2 .将name:"lisi",name:"zhangsan" 的 age 减 1

> db.c1.update({$or:[{name:"lisi"},{name:"zhangsan"}]},{$inc:{age:-1}},0,1)
WriteResult({ "nMatched" : 2, "nUpserted" : 0, "nModified" : 2 })

MongoD 语法的更多相关文章

  1. MongoDB命令及SQL语法对比

    mongodb与mysql命令对比 传统的关系数据库一般由数据库(database).表(table).记录(record)三个层次概念组成,MongoDB是由数据库(database).集合(col ...

  2. MongoDB(五)mongo语法和mysql语法对比学习

    我们总是在对比中看到自己的优点和缺点,对于mongodb来说也是一样,对比学习让我们尽快的掌握关于mongodb的基础知识. mongodb与MySQL命令对比 关系型数据库一般是由数据库(datab ...

  3. MongoDB 语法(转)

    Mongod.exe 是用来连接到mongo数据库服务器的,即服务器端. Mongo.exe 是用来启动MongoDB shell的,即客户端. 其他文件: mongodump 逻辑备份工具. mon ...

  4. MongoDB 语法使用小结

    MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的     他支持的数据结构非常松散,是类似json的bjson格式,因此可以存储比较复杂的数据 ...

  5. Mongodb语法总结

    mongodb与mysql指挥控制 由数据库中的一般传统的关系数据库(database).表(table).记录(record)三个层次概念组成.MongoDB是由数据库(database).集合(c ...

  6. 单机MongoD搭建

    MongoD 安装 1 .下载地址: wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-3.6.8.tgz 2 .添加 ...

  7. Mongodb的基本语法

    前段时间工作上面由于没有多少事所以玩了玩mongodb,学习了它的基本语法,然后现在在这里做一个简单的总结. 1.我是在win平台上面,启动的话比较麻烦,所以我就简单的把启动过程做了个批处理文件 启动 ...

  8. MONGO的简单语法,新手实用

    window上启动方式:(简单略) mongod --dbpath E:\study_lib\mongodb\db --port=27000 show dababases; (创建配置文件的启动方式) ...

  9. Mongo db 与mysql 语法比较

    mongodb与mysql命令对比 传统的关系数据库一般由数据库(database).表(table).记录(record)三个层次概念组成,MongoDB是由数据库(database).集合(col ...

随机推荐

  1. NOIP算法小结(转载)

    (一)数论 1.最大公约数,最小公倍数 2.筛法求素数 3.mod规律公式 4.排列组合数,错排 5.Catalan数 6.康托展开 7.负进制 8.中位数的应用 9.位运算 (二)高精度算法 1.朴 ...

  2. python多线程中join()方法和setDaemon()方法的区别

    """ join()方法:主线程A中,创建了子线程B,并且在主线程中调用了B.join()方法,那么主线程A会在调用的地方等待,直到子线程B完成操作后,才可以接着往下执行 ...

  3. Quartus16.1布线优化选择,重编译可能会满足时序

    流程 (1)在默认的优化编译下,时序违例. (2)在assignments中选择setting. (3)根据需求,选择不同的优化方式,目前选择性能优先. (4)可以发现时序满足要求. 以上.

  4. git常用命令介绍

    一,仓库 1. git init    把当前目录变成git可管理得仓库,也就是初始化仓库 2. git add 文件名            在仓库中添加新文件 3. git commit -m & ...

  5. C++:普通变量C++命名规则

    C++提倡使用拥有一定意义的变量名,使程序代码更有阅读性,命名是必须使用的几种简单的C++命名规则: 命名时只能使用:字母字符.数字和下划线(_); 第一个字符不能是数字: 区分大小写(C++对大小写 ...

  6. codeforces-1132 (div2)

    A.发现b的个数没有意义,a不等于d一定不可行,c不管多少都算一个,如果只有c没有ad也不可行 #include <map> #include <set> #include & ...

  7. JavaEE三大框架整合

    搭建项目: 搭建一个实际的项目,为了避免影响到你之前已经搭建过的项目,可以先新建一个工作空间,指定一个新的空间来做这一次的项目,不会和其他的项目冲突,尤其是在编码这一部分. 指定新工作空间的目录: 一 ...

  8. Jupyter Notebook 的安装使用以及 tree 路径变更

    由于最近开始学习 Python,进而接触到一个十分强大的交互式编辑器 — Jupyter Notebook,用起来也非常顺手,于是记录一下相关的使用过程. 一.安装 Python: ①首先前往 pyt ...

  9. 使用原生 python 造轮子搭建博客

    这篇用来 记录一个 从零开始的 博客搭建,希望坚持下去,因为python 开发效率令人发指,所以会原生从零写 ORM ,Web 框架 前提是打好 异步 io 的基础, 使用异步,有一点要谨记,一旦开始 ...

  10. 《Java》第九周学习总结

    下载mysql 选择mysql的管理软件 idea可以直接连接 然后用库运行程序,但是没有截图,,因为想在navicat上试试,可惜速度太慢了 打开idea又很慢,所以明天再更新