一、Mongodb命令

说明:Mongodb命令是区分大小写的,使用的命名规则是驼峰命名法。
对于database和collection无需主动创建,在插入数据时,如果database和collection不存在则会自动创建。

常用命令

help命令
通过此命令可以看到一些最基本的命令,如图:

use命令
例如命令【use demodb】,创建demodb,不用担心demodb不会创建,当使用use demodb 命令创建第一个collection时会自动创建数据库demodb,如图: 

插入数据
使用命令【db.collectionName.insert({name:"jack",age:33})】collectionName中插入一个document,如果collectionName不存在则创建。 使用命令【db.getCollectionNames()】会得到collectionName和system.indexex。system.indexex对于每个database都有,用于记录index。 使用命令【db.collectionName.find()】会查看到collectionName中的所有document。 命令如下:

E:\MongoDB\bin>mongo
MongoDB shell version: 2.6.5
connecting to: test
> use demodb
switched to db demodb
> db.FirstCollection.insert({name:"jack",age:22})
WriteResult({ "nInserted" : 1 })
> show collections
FirstCollection
system.indexes
> db.getCollectionNames()
[ "FirstCollection", "system.indexes" ]
> db.demodb.find()
> db.FirstCollection.find()
{ "_id" : ObjectId("543731431dc491f307663a0d"), "name" : "jack", "age" : 22 }
> db.system.indexes.find()
{ "v" : 1, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "demodb.FirstCollection" }

查询数据

参考网址:http://www.cnblogs.com/stephen-liu74/archive/2012/08/03/2553803.html

MongoDB使用find来进行查询.查询就是返回一个集合中文档的子集,子集合的范围从0个文档到整个集合.
find的第一个参数决定了要返回哪些文档(document的过滤条件).其形式也是一个文档,说明要查询的细节.空的查询文档{}会匹配集合的全部内容.
要是不指定查询文档,默认是{}.如:db.users.find()返回集合中的所有内容.
向查询文档中添加键值对,就意味着添加了查询条件.对绝大多数类型来说,整数匹配整 数,布尔类型匹配布尔类型,字符串匹配字符串.

先添加测试数据

db.Student.insert({name:"jack",sex:1,age:33})
db.Student.insert({name:"jack",sex:1,age:33})
db.Student.insert({name:"lily",sex:0,age:13})
db.Student.insert({name:"kaily",sex:0,age:33})
db.Student.insert({name:"tom",sex:1,age:53})

1、find()/findOne()条件过滤

只获取name等于jack的Student。findOne()则只获取第一条

> use demodb
switched to db demodb
> db.Student.find({name:"jack"})
{ "_id" : ObjectId("5437383157abafe09d99cbfc"), "name" : "jack", "sex" : 1, "age
" : 33 }
{ "_id" : ObjectId("543738b857abafe09d99cbfd"), "name" : "jack", "sex" : 1, "age
" : 33 }
> db.Student.findOne({name:"jack"})
{
"_id" : ObjectId("5437383157abafe09d99cbfc"),
"name" : "jack",
"sex" : 1,
"age" : 33
}

2、find()/findOne()指定返回的fileds

说明:find()的第二个参数限制返回的filed的个数,0代表不返回,1代表返回。"_id"键总是会被返回。
如果不带条件,只限制返回的filed个数的话,命令如下:db.Student.find({},{sex:0})。只需要第一个参数为{}空字典就可以。

只获取name等于jack的Student,并且filed为name,age的数据。

> db.Student.find({name:"jack"},{name:1,age:1})
{ "_id" : ObjectId("5437383157abafe09d99cbfc"), "name" : "jack", "age" : 33 }
{ "_id" : ObjectId("543738b857abafe09d99cbfd"), "name" : "jack", "age" : 33 }
> db.Student.find({name:"jack"},{sex:0})
{ "_id" : ObjectId("5437383157abafe09d99cbfc"), "name" : "jack", "age" : 33 }
{ "_id" : ObjectId("543738b857abafe09d99cbfd"), "name" : "jack", "age" : 33 }
>

3、查询条件

"$lt","$lte","$gt","$gte"分别对应<,<=,>,>= 
如下代码:
db.Student.find({age:{$gt:33}}) 查询age大于33的 
db.Student.find({age:{$gte:33}})
db.Student.find({age:{$lt:33}})
db.Student.find({age:{$lte:33}})
db.Student.find({age:{$gt:23,$lt:43}})

> db.Student.find({age:{$gt:33}})
{ "_id" : ObjectId("543738c357abafe09d99cc00"), "name" : "tom", "sex" : 1, "age" : 53 }
> db.Student.find({age:{$gte:33}})
{ "_id" : ObjectId("5437383157abafe09d99cbfc"), "name" : "jack", "sex" : 1, "age" : 33 }
{ "_id" : ObjectId("543738b857abafe09d99cbfd"), "name" : "jack", "sex" : 1, "age" : 33 }
{ "_id" : ObjectId("543738b857abafe09d99cbff"), "name" : "kaily", "sex" : 0, "age" : 33 }
{ "_id" : ObjectId("543738c357abafe09d99cc00"), "name" : "tom", "sex" : 1, "age" : 53 }
> db.Student.find({age:{$lt:33}})
{ "_id" : ObjectId("543738b857abafe09d99cbfe"), "name" : "lily", "sex" : 0, "age" : 13 }
> db.Student.find({age:{$lte:33}})
{ "_id" : ObjectId("5437383157abafe09d99cbfc"), "name" : "jack", "sex" : 1, "age" : 33 }
{ "_id" : ObjectId("543738b857abafe09d99cbfd"), "name" : "jack", "sex" : 1, "age" : 33 }
{ "_id" : ObjectId("543738b857abafe09d99cbfe"), "name" : "lily", "sex" : 0, "age" : 13 }
{ "_id" : ObjectId("543738b857abafe09d99cbff"), "name" : "kaily", "sex" : 0, "age" : 33 }
> db.Student.find({age:{$gt:23,$lt:43}})
{ "_id" : ObjectId("5437383157abafe09d99cbfc"), "name" : "jack", "sex" : 1, "age" : 33 }
{ "_id" : ObjectId("543738b857abafe09d99cbfd"), "name" : "jack", "sex" : 1, "age" : 33 }
{ "_id" : ObjectId("543738b857abafe09d99cbff"), "name" : "kaily", "sex" : 0, "age" : 33 }

$ne 代表不等于 
db.Student.find({age:{$ne:33}}) 查询age不等于33
$in,$not和$or

db.Student.find({age:{$in:[13,53]}})
db.Student.find(
{
$or:
[
{age:{$in:[13,53]}},
{name:"kaily"}
]
}
)

4、特殊查询--null和exists

null可以匹配自身,而且可以匹配"不存在的"

--插入测试数据
db.Student.insert({name:null,sex:1,age:18})
db.Student.insert({sex:1,age:24}) db.Student.find({name:null}) --上面两条都能查到
db.Student.find({name:{$in:[null],$exists:true}}) ---只能查到第一条

5、数组数据查询

db.Student.insert({name:"wjh",sex:1,age:18,color:["red","blue","black"]})
db.Student.insert({name:"lpj",sex:1,age:22,color:["white","blue","black"]})
db.Student.find() --color数组中所有包含white的文档都会被检索出来
db.Student.find({color:"white"})
--color数组中所有包含red和blue的文档都会被检索出来,数组中必须同时包含red和blue,但是他们的顺序无关紧要。
db.Student.find({color:{$all:["red","blue"]}})
--精确匹配,即被检索出来的文档,color值中的数组数据必须和查询条件完全匹配,即不能多,也不能少,顺序也必须保持一致。
db.Student.find({color:["red","blue","black"]})
--匹配数组中指定下标元素的值。数组的起始下标是0。注意color要加引号。
db.Student.find({"color.0":"white"})

6、内嵌文档查询

----待完成-------

7、排序

db.Student.find().sort({age:1})
db.Student.find().sort({age:1,sex:1}) --1代表升序,-1代表降序

8、分页

db.Student.find().sort({age:1}).limit(3).skip(3) 

--limit代表取多少个document,skip代表跳过前多少个document。

9、获取数量

db.Student.count({name:null})
--或者
db.Student.find({name:null}).count()

删除数据

说明:删除数据比较简单。

db.Student.remove({name:null})

更新数据

1.更新数据

命令【db.Student.update({name:"jack"},{age:55})】执行后
先查询name=jack的所有document,然后将name=jack的所有document都替换为{age:55},其它filed都没有了。
正确的更新方式应该为:
db.Student.update({name:"jack"},{$set:{age:55}})

2.增加field

--将name=lily的student增加一个filed height
db.Student.update({name:"lily"},{$inc:{height:175}})

3.upset-将数字field增加多少增量

--若存在则添加,否则更新,只能用于数字field,例如age更新前是50,更新了185,则变为235.
db.Student.update({name:"lily"},{$inc:{age:185}},true)

4.批量更新数据

------------------待完成---------

MongoDB学习笔记(二)的更多相关文章

  1. MongoDB学习笔记二- Mongoose

    MongoDB学习笔记二 Mongoose Mongoose 简介 之前我们都是通过shell来完成对数据库的各种操作, 在开发中大部分时候我们都需要通过程序来完成对数据库的操作 而Mongoose就 ...

  2. MongoDB学习笔记(二) 通过samus驱动实现基本数据操作

    传统的关系数据库一般由数据库(database).表(table).记录(record)三个层次概念组成,MongoDB是由(database).集合(collection).文档对象(documen ...

  3. MongoDB学习笔记二:使用Docker安装MongoDB

    目录 Docker安装MongoDB Docker给MongoDB设置用户密码 NoSQL Manager for MongoDB连接 为admin赋权限 上一个笔记介绍了Windows下安装Mong ...

  4. MongoDB学习笔记二—Shell操作

    数据类型 MongoDB在保留JSON基本键/值对特性的基础上,添加了其他一些数据类型. null null用于表示空值或者不存在的字段:{“x”:null} 布尔型 布尔类型有两个值true和fal ...

  5. Mongodb学习笔记二(Mongodb基本命令)

    第二章 基本命令 一.Mongodb命令 说明:Mongodb命令是区分大小写的,使用的命名规则是驼峰命名法. 对于database和collection无需主动创建,在插入数据时,如果databas ...

  6. MongoDB学习笔记二:创建、更新及删除文档

    插入并保存文档 对目标集使用insert方法插入一个文档: > db.foo.insert({"bar" : "baz"}) 这个操作会给文档增加一个&q ...

  7. MongoDB学习笔记(二)

    MongoDB的其他方法: 显示指定数目的数据: 1.在mongodb中查询指定数目的记录,可以使用: db.collectionname.find().limit(number); 2.在mongo ...

  8. Mongodb 学习笔记(二) :索引

    Mongodb 是基于集合建立索引 (Index),索引的作用类似于传统关系型数据库,目的是为了提高查询速度 . 如果没有建立索引, Mongodb  在读取数据时必须扫描集合中的 所有文档记录. 这 ...

  9. MongoDB学习笔记(转)

    MongoDB学习笔记(一) MongoDB介绍及安装MongoDB学习笔记(二) 通过samus驱动实现基本数据操作MongoDB学习笔记(三) 在MVC模式下通过Jqgrid表格操作MongoDB ...

  10. MongoDB学习笔记(二)--Capped集合 && GridFS存储文件

    Capped集合                                                            Capped集合的大小是固定的,如果空间都被用完了,新添加的对象 ...

随机推荐

  1. Android项目开发填坑记-Fragment的onAttach

    背景 现在Android开发多使用一个Activity管理多个Fragment进行开发,不免需要两者相互传递数据,一般是给Fragment添加回调接口,让Activity继承并实现. 回调接口一般都写 ...

  2. 详解EBS接口开发之销售订单导入

     步骤 1. 创建一个订单导入来源.       - 导航到 OM -> 设置 -> 订单 -> 导入来源       - 输入一个新的订单导入来源名称和描述 - 选择启用来激活 ...

  3. ios7内购、Game Center 实现 in-App Purchases & Game Center

    猴子原创,欢迎转载.转载请注明: 转载自Cocos2D开发网–Cocos2Dev.com,谢谢! 原文地址: http://www.cocos2dev.com/?p=514 昨天使用ios7SDK b ...

  4. ROS(indigo)ABB机器人MoveIt例子

    ROS(indigo)ABB机器人例子 参考网址: 1  http://wiki.ros.org/Industrial 2  http://wiki.ros.org/abb 3  https://gi ...

  5. 01 Android修改新建虚拟机存放的位置

    创建的Android虚拟机(即AVD)的位置是在C盘的当前用户文件夹下(C:\Users\用户名\.android\avd) 这一默认设置不怎么好,特别是C盘空间吃紧的话. 这里提供2个解决办法(分2 ...

  6. Ubuntu 15.10下Qt5的安装实战

    写照篇博客的目的就是因为最近要使用Qt,但是由于本人的系统是Ubuntu的,而网上大部分的讲解全是基于Windows的,所以就花费一些时间总结了一下我的安装过程,当然也是也为了能帮助到更多的博友. 第 ...

  7. 使用FMDB多线程访问数据库,及database is locked的问题

    每日更新关注:http://weibo.com/hanjunqiang  新浪微博 今天终于解决了多线程同时访问数据库时,报数据库锁定的问题,错误信息是: Unknown error finalizi ...

  8. 用SpriteBuilder简化"耕牛遍地走"的动画效果(四)

    写到这突然有童鞋质疑,你这哪里是牛,分明是熊嘛! 仔细看了下,还真像牛.反正是这个意思.怪本猫猪牛熊不分,好在道理是一样的. 下面继续,言归正传. 添加一个空白的touchBegan方法,如果没有这个 ...

  9. 【一天一道LeetCode】#108. Convert Sorted Array to Binary Search Tree

    一天一道LeetCode 本系列文章已全部上传至我的github,地址:ZeeCoder's Github 欢迎大家关注我的新浪微博,我的新浪微博 欢迎转载,转载请注明出处 (一)题目 Given a ...

  10. try、catch、finally 块的关系

    try.catch.finally 块的关系 try块不能单独存在,后面必须跟catch块或者finally块. 三者之间的组合为:try-catch.try-catch-finally.try-fi ...