`

深入浅出MongoDB(四):常用命令详细讲解

阅读更多

 

创建数据库,集合

由于MongoDB不是关系型数据库文件,实际上,它并不存在传统关系型数据库中所谓数据库的概念,当你第一次新增数据时,MongoDB就会以collection集合的开式进行保存和新建,而不需要你提前去建立

列出所有/当前的数据库

使用show dbs命令查看所有的数据库db命令查询当前链接的数据库

huangyineng@ubuntu:/usr/local/mongodb/bin$ ./mongo

MongoDB shell version: 2.0.7

connecting to: test

> show dbs

local   (empty)

> db

test

有些同学可能感觉到很奇怪,为什么连接了test数据库,在显示所有数据库的时候竟没有test呢?这是因为连接test时,并没有向其中写数据,所以并没有真正的建立、只是在使用当前的数据库。

定义新的数据库连接

用“use 数据库名”来定义新的数据库连接,和上面的test一样,只是建立了连接

> use mydb

switched to db mydb

> show dbs

local   (empty)

> db

mydb

增加文档

MongoDB插入原理:使用驱动程序进行插入的时候,会装数据转换成BSON格式,数据库会解析BSON,并检查是否含有“_id”键,因为“_id”键在插入到数据库时MongoDB会自动生成。

定义一个collection(集合),名为users,然后插入文档:

> db.users.insert({name:"mongodb"});

> show dbs

local   (empty)

mydb    0.0625GB

> show collections

system.indexes

users

> show tables

system.indexes

users

> db.users.find()

{ "_id" : ObjectId("503253a308186c0b9de9ae8f"), "name" : "mongodb" }

> db.users.save({name:"naxsu"})

> db.users.find()

{ "_id" : ObjectId("503253a308186c0b9de9ae8f"), "name" : "mongodb" }

{ "_id" : ObjectId("5032571608186c0b9de9ae90"), "name" : "nosql" }

{ "_id" : ObjectId("5032577308186c0b9de9ae91"), "name" : "naxsu" }

首先用insert(用save也可以)语句插入一条数据,使用的是users集合,插入成功后查看所有的库,多了一个mydb库,再查看所有的集合(show collectionsshow tables),多了一个users集合,再用db.users.find()查看users集合中的所有文档。

可以增加字段

> db.users.insert({name:'name1',sex:'man'})

> db.users.find()

{ "_id" : ObjectId("503253a308186c0b9de9ae8f"), "name" : "mongodb" }

{ "_id" : ObjectId("5032571608186c0b9de9ae90"), "name" : "nosql" }

{ "_id" : ObjectId("5032577308186c0b9de9ae91"), "name" : "naxsu" }

{ "_id" : ObjectId("503259c895e66fd3daf3beaa"), "name" : "name1", "sex" : "man" }

id自增长的解决方案:定义一个函数,在插入_id时调用自己定义的函数来实现id自增

function counter(name){

var ret = db.counters.findAndModify({query:{_id:name},update:{$inc:{next:1}},”new”:true,upsert:true});

return ret.next;

}

> db.users.insert({_id:counter(“users”),name:”id1”})//_id:1

> db.users.insert({_id:counter(“users”),name:”id2”})//_id:2

注:system.indexes是由所有文档的_id组成的索引集合。

存储在MongoDB集合中的每个文档都有一个默认的主键_id,它必须是唯一的,这个主键名称是固定的,它可以是MongoDB支持的任何数据类型,默认是ObjectId.

Insertsave的不同点:如果已存在_idInsert会插入失败,而save会更新原有的数据

删除文档

删除文档用remove命令

语法格式:db.collname.remove({条件}),不写条件删除所有记录

> db.users.remove({name:"naxsu"})

> db.users.find()

{ "_id" : ObjectId("503253a308186c0b9de9ae8f"), "name" : "mongodb" }

{ "_id" : ObjectId("5032571608186c0b9de9ae90"), "name" : "nosql" }

{ "_id" : ObjectId("503259c895e66fd3daf3beaa"), "name" : "name1", "sex" : "man" }

> db.users.remove()

> db.users.find()

更新文档

先来创建两条记录,然后进行更新操作

> db.users.insert({name:"mongodb"})

> db.users.insert({name:"nosql",sex:"none"})

> db.users.find()

{ "_id" : ObjectId("50325c0a95e66fd3daf3beab"), "name" : "mongodb" }

{ "_id" : ObjectId("50325c3595e66fd3daf3beac"), "name" : "nosql", "sex" : "none" }

> db.users.update({name:"mongodb"},{name:"mongodbname"})

> db.users.find()

{ "_id" : ObjectId("50325c3595e66fd3daf3beac"), "name" : "nosql", "sex" : "none" }

{ "_id" : ObjectId("50325c0a95e66fd3daf3beab"), "name" : "mongodbname" }

我们用上面这种方法来更新另外一条记录

> db.users.update({name:"nosql"},{name:"mynosql"})

> db.users.find()

{ "_id" : ObjectId("50325c3595e66fd3daf3beac"), "name" : "mynosql" }

{ "_id" : ObjectId("50325c0a95e66fd3daf3beab"), "name" : "mongodbname" }

发现了没,sex字段竟没有了,这时候set关键字就派上用场了

> db.users.insert({name:"nosql",sex:"man"})

> db.users.find()

{ "_id" : ObjectId("50325c3595e66fd3daf3beac"), "name" : "mynosql" }

{ "_id" : ObjectId("50325c0a95e66fd3daf3beab"), "name" : "mongodbname" }

{ "_id" : ObjectId("50325e87b8e32f5aeae17d8c"), "name" : "nosql", "sex" : "man" }

> db.users.update({name:"nosql"},{$set:{name:"nosqls"}})

> db.users.find()

{ "_id" : ObjectId("50325c3595e66fd3daf3beac"), "name" : "mynosql" }

{ "_id" : ObjectId("50325c0a95e66fd3daf3beab"), "name" : "mongodbname" }

{ "_id" : ObjectId("50325e87b8e32f5aeae17d8c"), "name" : "nosqls", "sex" : "man" }

 

查询文档

查询用findfindOne(查询一条)

语法格式:db.collname.find({条件}),不写条件查询所有的数据

> db.users.find()

{ "_id" : ObjectId("50325c3595e66fd3daf3beac"), "name" : "mynosql" }

{ "_id" : ObjectId("50325c0a95e66fd3daf3beab"), "name" : "mongodbname" }

{ "_id" : ObjectId("50325e87b8e32f5aeae17d8c"), "name" : "nosqls", "sex" : "man" }

> db.users.find ({name:"nosqls"})

{ "_id" : ObjectId("50325e87b8e32f5aeae17d8c"), "name" : "nosqls", "sex" : "man" }

> db.users.findOne()

{ "_id" : ObjectId("50325c3595e66fd3daf3beac"), "name" : "mynosql" }

查询指定的字段,_id默认是显示的,如果不要其显示,用_id:0

> db.users.find({name:'nosqls'})

{ "_id" : ObjectId("50325e87b8e32f5aeae17d8c"), "name" : "nosqls", "sex" : "man" }

> db.users.find({name:"nosqls"},{name:1})

{ "_id" : ObjectId("50325e87b8e32f5aeae17d8c"), "name" : "nosqls" }

> db.users.find({name:"nosqls"},{name:1,sex:1})

{ "_id" : ObjectId("50325e87b8e32f5aeae17d8c"), "name" : "nosqls", "sex" : "man" }

> db.users.find({name:"nosqls"},{name:1,sex:1,_id:0})

{ "name" : "nosqls", "sex" : "man" }

mysql中,我们有这样的语句:

Select * from t1 order by age desc limit 1,2

Select count(*) from t1

这在MongoDB中是否也有类似的函数呢?答案是肯定的,下面我们来插入一些数据来操作

> for(i=1;i<=10;i++){

... db.c1.insert({name:"user"+i,age:i});

... }

> db.c1.find()

{ "_id" : ObjectId("5032d0b73142123b5a215d50"), "name" : "user1", "age" : 1 }

{ "_id" : ObjectId("5032d0b73142123b5a215d51"), "name" : "user2", "age" : 2 }

{ "_id" : ObjectId("5032d0b73142123b5a215d52"), "name" : "user3", "age" : 3 }

{ "_id" : ObjectId("5032d0b73142123b5a215d53"), "name" : "user4", "age" : 4 }

{ "_id" : ObjectId("5032d0b73142123b5a215d54"), "name" : "user5", "age" : 5 }

{ "_id" : ObjectId("5032d0b73142123b5a215d55"), "name" : "user6", "age" : 6 }

{ "_id" : ObjectId("5032d0b73142123b5a215d56"), "name" : "user7", "age" : 7 }

{ "_id" : ObjectId("5032d0b73142123b5a215d57"), "name" : "user8", "age" : 8 }

{ "_id" : ObjectId("5032d0b73142123b5a215d58"), "name" : "user9", "age" : 9 }

{ "_id" : ObjectId("5032d0b73142123b5a215d59"), "name" : "user10", "age" : 10 }

count()统计文档数

sort来对文档进行排序,age:-1表示以age降序来显示,age:1表示以age升序来显示

limit来限制输出几条文档,用skip跳过几个再输出,limitskipsortcount的可以组合使用

> db.c1.count()

10

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

{ "_id" : ObjectId("5032d0b73142123b5a215d59"), "name" : "user10", "age" : 10 }

{ "_id" : ObjectId("5032d0b73142123b5a215d58"), "name" : "user9", "age" : 9 }

{ "_id" : ObjectId("5032d0b73142123b5a215d57"), "name" : "user8", "age" : 8 }

{ "_id" : ObjectId("5032d0b73142123b5a215d56"), "name" : "user7", "age" : 7 }

{ "_id" : ObjectId("5032d0b73142123b5a215d55"), "name" : "user6", "age" : 6 }

{ "_id" : ObjectId("5032d0b73142123b5a215d54"), "name" : "user5", "age" : 5 }

{ "_id" : ObjectId("5032d0b73142123b5a215d53"), "name" : "user4", "age" : 4 }

{ "_id" : ObjectId("5032d0b73142123b5a215d52"), "name" : "user3", "age" : 3 }

{ "_id" : ObjectId("5032d0b73142123b5a215d51"), "name" : "user2", "age" : 2 }

{ "_id" : ObjectId("5032d0b73142123b5a215d50"), "name" : "user1", "age" : 1 }

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

{ "_id" : ObjectId("5032d0b73142123b5a215d50"), "name" : "user1", "age" : 1 }

{ "_id" : ObjectId("5032d0b73142123b5a215d51"), "name" : "user2", "age" : 2 }

{ "_id" : ObjectId("5032d0b73142123b5a215d52"), "name" : "user3", "age" : 3 }

{ "_id" : ObjectId("5032d0b73142123b5a215d53"), "name" : "user4", "age" : 4 }

{ "_id" : ObjectId("5032d0b73142123b5a215d54"), "name" : "user5", "age" : 5 }

{ "_id" : ObjectId("5032d0b73142123b5a215d55"), "name" : "user6", "age" : 6 }

{ "_id" : ObjectId("5032d0b73142123b5a215d56"), "name" : "user7", "age" : 7 }

{ "_id" : ObjectId("5032d0b73142123b5a215d57"), "name" : "user8", "age" : 8 }

{ "_id" : ObjectId("5032d0b73142123b5a215d58"), "name" : "user9", "age" : 9 }

{ "_id" : ObjectId("5032d0b73142123b5a215d59"), "name" : "user10", "age" : 10 }

> db.c1.find().limit(2);

{ "_id" : ObjectId("5032d0b73142123b5a215d50"), "name" : "user1", "age" : 1 }

{ "_id" : ObjectId("5032d0b73142123b5a215d51"), "name" : "user2", "age" : 2 }

> db.c1.find().sort({name:-1}).limit(2);

{ "_id" : ObjectId("5032d0b73142123b5a215d58"), "name" : "user9", "age" : 9 }

{ "_id" : ObjectId("5032d0b73142123b5a215d57"), "name" : "user8", "age" : 8 }

> db.c1.find().skip(5).limit(3);

{ "_id" : ObjectId("5032d0b73142123b5a215d55"), "name" : "user6", "age" : 6 }

{ "_id" : ObjectId("5032d0b73142123b5a215d56"), "name" : "user7", "age" : 7 }

{ "_id" : ObjectId("5032d0b73142123b5a215d57"), "name" : "user8", "age" : 8 }

> db.c1.find().skip(5).limit(3).count();

10

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

3

> db.c1.find().skip(5).limit(3).count(0)

10

注:

如果limitskipsortcount组合使用,是先排序、再跳过几条,然后再限制输出几条。

count如果不输入参数或者输入为0,会把find()后面的参数忽略,如果他的参数不为0,则统计在前面的条件过滤后的结果

条件表达式

1.         <($lt),<=($lte),>($gt),>=($gte) ,!=($ne)

> db.c1.find({age:{$gt:5}})

{ "_id" : ObjectId("5032d0b73142123b5a215d55"), "name" : "user6", "age" : 6 }

{ "_id" : ObjectId("5032d0b73142123b5a215d56"), "name" : "user7", "age" : 7 }

{ "_id" : ObjectId("5032d0b73142123b5a215d57"), "name" : "user8", "age" : 8 }

{ "_id" : ObjectId("5032d0b73142123b5a215d58"), "name" : "user9", "age" : 9 }

{ "_id" : ObjectId("5032d0b73142123b5a215d59"), "name" : "user10", "age" : 10 }

> db.c1.find({age:{$gt:5,$lte:8}})

{ "_id" : ObjectId("5032d0b73142123b5a215d55"), "name" : "user6", "age" : 6 }

{ "_id" : ObjectId("5032d0b73142123b5a215d56"), "name" : "user7", "age" : 7 }

{ "_id" : ObjectId("5032d0b73142123b5a215d57"), "name" : "user8", "age" : 8 }

2.         $all

$all操作要求数组里面的值全部被包含在返回的记录里面,如:

> db.c2.insert({a:[123,1,2,3,4]})

> db.c2.find()

{ "_id" : ObjectId("5032d6a63142123b5a215d5a"), "a" : [ 123, 1, 2, 3, 4 ] }

> db.c2.find({a:{$all:[2,3]}})

{ "_id" : ObjectId("5032d6a63142123b5a215d5a"), "a" : [ 123, 1, 2, 3, 4 ] }

> db.c2.find({a:{$all:[2,6]}})

3.         $exists

$exists操作检查一个字段是否存在,如:

> db.c2.find({age:{$exists:1}})

> db.c2.find({a:{$exists:1}})

{ "_id" : ObjectId("5032d6a63142123b5a215d5a"), "a" : [ 123, 1, 2, 3, 4 ] }

4.         $mod

$mod操作可以让我们简单的进行取模操作,而不需要用到where子句,如:

> db.c1.find({age:{$mod:[2,1]}})

{ "_id" : ObjectId("5032d0b73142123b5a215d50"), "name" : "user1", "age" : 1 }

{ "_id" : ObjectId("5032d0b73142123b5a215d52"), "name" : "user3", "age" : 3 }

{ "_id" : ObjectId("5032d0b73142123b5a215d54"), "name" : "user5", "age" : 5 }

{ "_id" : ObjectId("5032d0b73142123b5a215d56"), "name" : "user7", "age" : 7 }

{ "_id" : ObjectId("5032d0b73142123b5a215d58"), "name" : "user9", "age" : 9 }

5.         $in, $nin

$in操作类似于传统关系数据库中的IN, $nin$in操作相反

> db.c1.find({age:{$in:[4,5,6]}})

{ "_id" : ObjectId("5032d0b73142123b5a215d53"), "name" : "user4", "age" : 4 }

{ "_id" : ObjectId("5032d0b73142123b5a215d54"), "name" : "user5", "age" : 5 }

{ "_id" : ObjectId("5032d0b73142123b5a215d55"), "name" : "user6", "age" : 6 }

> db.c1.find({age:{$nin:[4,5,6]}})

{ "_id" : ObjectId("5032d0b73142123b5a215d50"), "name" : "user1", "age" : 1 }

{ "_id" : ObjectId("5032d0b73142123b5a215d51"), "name" : "user2", "age" : 2 }

{ "_id" : ObjectId("5032d0b73142123b5a215d52"), "name" : "user3", "age" : 3 }

{ "_id" : ObjectId("5032d0b73142123b5a215d56"), "name" : "user7", "age" : 7 }

{ "_id" : ObjectId("5032d0b73142123b5a215d57"), "name" : "user8", "age" : 8 }

{ "_id" : ObjectId("5032d0b73142123b5a215d58"), "name" : "user9", "age" : 9 }

{ "_id" : ObjectId("5032d0b73142123b5a215d59"), "name" : "user10", "age" : 10 }

6.         $nor$or

> db.c1.find({$or:[{name:"user2"},{name:"user3"}]})

{ "_id" : ObjectId("5032d0b73142123b5a215d51"), "name" : "user2", "age" : 2 }

{ "_id" : ObjectId("5032d0b73142123b5a215d52"), "name" : "user3", "age" : 3 }

> db.c1.find({$nor:[{name:"user2"},{name:"user3"},{name:"user4"},{name:"user5"}]})

{ "_id" : ObjectId("5032d0b73142123b5a215d50"), "name" : "user1", "age" : 1 }

{ "_id" : ObjectId("5032d0b73142123b5a215d55"), "name" : "user6", "age" : 6 }

{ "_id" : ObjectId("5032d0b73142123b5a215d56"), "name" : "user7", "age" : 7 }

{ "_id" : ObjectId("5032d0b73142123b5a215d57"), "name" : "user8", "age" : 8 }

{ "_id" : ObjectId("5032d0b73142123b5a215d58"), "name" : "user9", "age" : 9 }

{ "_id" : ObjectId("5032d0b73142123b5a215d59"), "name" : "user10", "age" : 10 }

> db.c1.find({$or:[{name:"user2"},{age:8}]})

{ "_id" : ObjectId("5032d0b73142123b5a215d51"), "name" : "user2", "age" : 2 }

{ "_id" : ObjectId("5032d0b73142123b5a215d57"), "name" : "user8", "age" : 8 }

7.         $size

$size操作将会查询数组长度等于输入参数的数组,例子:

> db.c2.find();

{ "_id" : ObjectId("5032d6a63142123b5a215d5a"), "a" : [ 123, 1, 2, 3, 4 ] }

{ "_id" : ObjectId("50337a8aed4213674aebade4"), "b" : [ 568, 89, 52 ] }

> db.c2.find({a:{$size:4}})

> db.c2.find({a:{$size:5}})

{ "_id" : ObjectId("5032d6a63142123b5a215d5a"), "a" : [ 123, 1, 2, 3, 4 ] }

 本文链接:http://www.656463.com/portal.php?mod=view&aid=78,转载请注明出处

下一节:深入浅出MongoDB(五):使用Java操作MongoDB

分享到:
评论

相关推荐

    深入浅出MongoDB应用实战集群及系统架构

    ### MongoDB应用实战集群及系统架构 #### MongoDB简介 MongoDB是一种非常流行的开源文档数据库,它采用了NoSQL(非关系型数据库)技术,可以提供高性能、高可用性和易扩展性。MongoDB非常适合处理大规模数据和复杂...

    深入浅出MongoDB应用实战开发视频教学

    深入浅出MongoDB应用实战开发视频教学,里面包含笔记和资料

    MongoDB常用命令批处理

    以下是根据提供的文件名解析出的MongoDB相关知识点: 1. **安装MongoDB服务**: - `install.bat`:这个文件可能是用于在Windows操作系统上安装MongoDB服务的批处理脚本。通常,它会包含启动MongoDB服务的命令,...

    MongoDB实战:MongoDB in Action

    "MongoDB实战:MongoDB in Action"是一本专为开发者和数据库管理员设计的书籍,旨在深入理解和应用MongoDB。这本书分为中英文两个版本,为读者提供了全面的学习资源。 1. **文档型数据库**:MongoDB是NoSQL数据库的...

    windows版本 mongodb shell:mongosh-2.2.6-win32-x64.zip

    windows版本 mongodb shell:mongosh-2.2.6-win32-x64.zip mongodb shell :https://www.mongodb.com/try/download/shell mongodb相关官网下载地址: mongodb社区版:...

    mongodb资源:MongoDB的基于DAO的基本操作

    mongodb资源:MongoDB的基于DAO的基本操作

    mongodb常用命令.txt

    在centos7下安装部署mongodb分片+副本集群常用命令整理,内容包含,安装、配置、启动、访问shell终端等命令

    MongoDB数据库常用命令.docx

    MongoDB 数据库常用命令大全 MongoDB 是 NoSQL 数据库系统中比较流行的数据库之一。它也是最接近关系型数据库的,一个数据库可以包含多个集合(Collection),类似于关系数据库中的表;而每个集合中可以存储一组由...

    MongoDB数据库常用操作命令8.pdf

    本文将深入探讨在MongoDB中常见的数据库操作命令,这些命令对于理解和操作MongoDB至关重要。 首先,让我们来看一下如何根据年龄对数据进行排序。在MongoDB中,可以使用`sort()`函数来对查询结果进行排序。例如,...

    mongodb安装文件安装步骤常用命令和案例.rar

    通过阅读`mongodb操作.pdf`和`搭建单机版的mongodb.pdf`文档,您可以更深入地了解这些步骤和命令的详细解释,以及在实际项目中如何应用MongoDB。记得在学习过程中实践操作,理论与实践相结合,才能更好地掌握MongoDB...

    mongodb的常用命令

    以下是一些MongoDB的常用命令及其详细解释: 1. **停止数据库**: - 使用`control-c`:在终端中按下`control-c`可以中断当前运行的MongoDB进程。 - `use admin`:切换到`admin`数据库,这是一个特殊的角色,可以...

    深入学习MongoDB:Scaling MongoDB && 50 Tips and Tricks for MongoDB Developers

    深入学习MongoDB:Scaling MongoDB && 50 Tips and Tricks for MongoDB Developers深入学习MongoDB中文版Scaling MongoDB英文版50 Tips and Tricks for MongoDB Developers英文版高清完整目录3本打包合集

    MongoDB命令

    ### MongoDB 命令详解 #### 一、概述 MongoDB 是一款开源的、通用目的数据库系统,它采用文档数据模型来存储数据,而非传统的关系型数据库所使用的行和列形式。在 MongoDB 中,数据被存储为二进制格式的 JSON 文档...

    mongodb安装图文讲解.pdf

    MongoDB 是目前最流行的 NoSQL 数据库之一,本文将通过图文讲解的方式,详细介绍 MongoDB 的安装过程。 一、安装前必读 在开始安装 MongoDB 之前,我们需要了解一些基本概念和注意事项。在本文中,我们将使用 ...

    MongoDB权威指南:MongoDB:The Definitive Guide

    首先,书中会详细介绍MongoDB的安装和配置过程,无论是Windows、Linux还是macOS平台,都有详尽的步骤指导,帮助读者快速搭建开发环境。同时,还会涉及MongoDB的命令行工具,如mongo shell的使用,以及如何通过可视化...

    mongodb实验-数据库基本操作-MongoDB实验:数据库基本操作指南与实例

    内容概要:本文详细介绍了MongoDB数据库的基础操作流程,从启动MongoDB服务到连接服务器、创建数据库和集合、数据的插入、查询、更新和删除以及索引操作。通过实例演示了每个操作的具体步骤和方法,帮助初学者掌握...

    mongodb安装和实用命令

    MongoDB 安装和实用命令 MongoDB 是一个基于分布式文件存储的开源数据库系统。它的主要特点是高性能、易扩展、灵活的数据模型等。下面是 MongoDB 的安装和实用命令。 安装 MongoDB 1. 下载 MongoDB 的安装包,...

    Windows上安装MongoDB:完整步骤详解.pdf

    1. 连接MongoDB:输入`mongo.exe`命令,连接到本地MongoDB服务。 2. 创建数据库:使用`use &lt;database_name&gt;`命令,如`use testdb`,创建一个名为"testdb"的数据库。 3. 插入数据:在选定的数据库中,使用`db....

    mongodb 数据库常用命令大全手册

    以下是对MongoDB数据库常用命令的详细介绍: 1. **连接数据库**:使用`mongo`命令启动MongoDB shell,连接到默认的`test`数据库。若要连接到特定数据库,如`mydb`,可执行`use mydb`。 2. **显示所有数据库**:`...

    MongoDB常用的操作命令.txt

    ### MongoDB常用操作命令详解 #### 一、启动与配置MongoDB...以上就是关于MongoDB常用操作命令的详细介绍,涵盖了启动配置、基本数据库操作及数据操作等方面的内容。希望这些信息能帮助您更好地理解和使用MongoDB。

Global site tag (gtag.js) - Google Analytics