`

mongodb的常用操作

阅读更多

1.与关系型数据库(MySQL)的对比

document(文档)<->  一行记录

collection(集合) <->  Table(表)

database(数据库)<-> database

 

2.crud操作

创建

> user = {'name': 'sosop', 'age': 18, 'gender': 'male'}
{ "name" : "sosop", "age" : 18, "gender" : "male" }
> db.users.insert(user)
WriteResult({ "nInserted" : 1 })

 查询

db.users.insert(user)
WriteResult({ "nInserted" : 1 })
> db.users.find()
{ "_id" : ObjectId("549557d23359eef64b07bb46"), "name" : "sosop", "age" : 18, "gender" : "male" }
> db.users.findOne()
{
	"_id" : ObjectId("549557d23359eef64b07bb46"),
	"name" : "sosop",
	"age" : 18,
	"gender" : "male"
}

 更新

user.birthday = new Date('1996-01-01')
ISODate("1996-01-01T00:00:00Z")
b.users.update({'name': 'sosop'},user)
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.users.find()
{ "_id" : ObjectId("549557d23359eef64b07bb46"), "name" : "sosop", "age" : 18, "gender" : "male", "birthday" : ISODate("1996-01-01T00:00:00Z") }

 删除

db.users.remove({'name': 'sosop'})
WriteResult({ "nRemoved" : 1 })

 

3.修改器的使用

$set:键不存在则创建,存在则修改

> db.users.find()
{ "_id" : ObjectId("549567573359eef64b07bb47"), "name" : "sosop", "age" : 18, "gender" : "male", "birthday" : ISODate("1996-01-01T00:00:00Z") }
> db.users.update({'name': 'sosop'}, {$set: {'birthday': new Date('1996-03-11')}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.users.find()
{ "_id" : ObjectId("549567573359eef64b07bb47"), "name" : "sosop", "age" : 18, "gender" : "male", "birthday" : ISODate("1996-03-11T00:00:00Z") }
> db.users.update({'name': 'sosop'}, {$set: {'email': 'sosopish@163.com'}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.users.find()
{ "_id" : ObjectId("549567573359eef64b07bb47"), "name" : "sosop", "age" : 18, "gender" : "male", "birthday" : ISODate("1996-03-11T00:00:00Z"), "email" : "sosopish@163.com" }

 

$inc:增加减少

> db.users.update({'name': 'sosop'}, {$inc: {'age': 10}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.users.findOne()
{
	"_id" : ObjectId("549567573359eef64b07bb47"),
	"name" : "sosop",
	"age" : 28,
	"gender" : "male",
	"birthday" : ISODate("1996-03-11T00:00:00Z"),
	"email" : "sosopish@163.com"
}
> db.users.update({'name': 'sosop'}, {$inc: {'age': -2}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.users.find()
{ "_id" : ObjectId("549567573359eef64b07bb47"), "name" : "sosop", "age" : 26, "gender" : "male", "birthday" : ISODate("1996-03-11T00:00:00Z"), "email" : "sosopish@163.com" }

 

$push

> db.users.update({'age': 26}, {$push: {'phone': "88888888888"}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.users.find()
{ "_id" : ObjectId("549567573359eef64b07bb47"), "name" : "sosop", "age" : 26, "gender" : "male", "birthday" : ISODate("1996-03-11T00:00:00Z"), "email" : "sosopish@163.com", "phone" : [ "88888888888" ] 

 $addToSet

db.users.update({'name': 'sosop'}, {$addToSet: {'phone': '66666666666'}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.users.find()
{ "_id" : ObjectId("549567573359eef64b07bb47"), "name" : "sosop", "age" : 26, "gender" : "male", "birthday" : ISODate("1996-03-11T00:00:00Z"), "email" : "sosopish@163.com", "phone" : [ "88888888888", "66666666666" ] }
db.users.update({'name': 'sosop'}, {$addToSet: {'phone': {$each: ['99999999999', '000000000']}}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.users.find()
{ "_id" : ObjectId("549567573359eef64b07bb47"), "name" : "sosop", "age" : 26, "gender" : "male", "birthday" : ISODate("1996-03-11T00:00:00Z"), "email" : "sosopish@163.com", "phone" : [ "88888888888", "66666666666", "99999999999", "000000000" ] }

$pop:{key: 1} 从尾部删除 {key: -1}从头部删除

$pull:{key: value} 删除指定元素

 

数组定位修改器

db.users.update({'name': 'sosop'}, {$set: {'phone.$.xxx': 'xxx'}}

 

4.upsert更新或创建,同时避免静态

update({}, {}, true)

save: 存在时更新,否则插入

update({}, {}, true, true): 多文档更新

 

5.查询

find() find({}) find({}, {field: 1|0...})

> db.users.find({'age': {$gte: 18, $lte: 30}})
{ "_id" : ObjectId("549567573359eef64b07bb47"), "name" : "sosop", "age" : 26, "gender" : "male", "birthday" : ISODate("1996-03-11T00:00:00Z"), "email" : "sosopish@163.com", "phone" : [ "88888888888", "66666666666", "99999999999" ] }

$lt $gt $lte $gte $ne

$in $nin

db.users.find({'phone': {$in: ['666666666', '66666666666']}})
{ "_id" : ObjectId("549567573359eef64b07bb47"), "name" : "sosop", "age" : 26, "gender" : "male", "birthday" : ISODate("1996-03-11T00:00:00Z"), "email" : "sosopish@163.com", "phone" : [ "88888888888", "66666666666", "99999999999" ] }

$or

> db.users.find({$or: [{'name': 'sosop'}, {'age': 18}]})
{ "_id" : ObjectId("549567573359eef64b07bb47"), "name" : "sosop", "age" : 26, "gender" : "male", "birthday" : ISODate("1996-03-11T00:00:00Z"), "email" : "sosopish@163.com", "phone" : [ "88888888888", "66666666666", "99999999999" ] }

 

$not $mod

 

6.特定类型查询

null

> db.users.find({'name': {$exists: true}})
{ "_id" : ObjectId("549567573359eef64b07bb47"), "name" : "sosop", "age" : 26, "gender" : "male", "birthday" : ISODate("1996-03-11T00:00:00Z"), "email" : "sosopish@163.com", "phone" : [ "88888888888", "66666666666", "99999999999" ] }
> db.users.find({'addr': {$exists: true}})
> 

reg:

db.users.find({'name': /sosop/})
{ "_id" : ObjectId("549567573359eef64b07bb47"), "name" : "sosop", "age" : 26, "gender" : "male", "birthday" : ISODate("1996-03-11T00:00:00Z"), "email" : "sosopish@163.com", "phone" : [ "88888888888", "66666666666", "99999999999" ] }
db.users.find({'name': /\S/i})
{ "_id" : ObjectId("549567573359eef64b07bb47"), "name" : "sosop", "age" : 26, "gender" : "male", "birthday" : ISODate("1996-03-11T00:00:00Z"), "email" : "sosopish@163.com", "phone" : [ "88888888888", "66666666666", "99999999999" ] 

 数组查询

> db.users.find({'phone': {$all: ['88888888888', '99999999999']}})
{ "_id" : ObjectId("549567573359eef64b07bb47"), "name" : "sosop", "age" : 26, "gender" : "male", "birthday" : ISODate("1996-03-11T00:00:00Z"), "email" : "sosopish@163.com", "phone" : [ "88888888888", "66666666666", "99999999999" ] }

 

> db.users.find({'phone': {$size: 3}})
{ "_id" : ObjectId("549567573359eef64b07bb47"), "name" : "sosop", "age" : 26, "gender" : "male", "birthday" : ISODate("1996-03-11T00:00:00Z"), "email" : "sosopish@163.com", "phone" : [ "88888888888", "66666666666", "99999999999" ] }

 

> db.users.find({'name': 'sosop'},{'phone': {$slice: 1}})
{ "_id" : ObjectId("549567573359eef64b07bb47"), "name" : "sosop", "age" : 26, "gender" : "male", "birthday" : ISODate("1996-03-11T00:00:00Z"), "email" : "sosopish@163.com", "phone" : [ "88888888888" ] }
> db.users.find({'name': 'sosop'},{'phone': {$slice: 2}})
{ "_id" : ObjectId("549567573359eef64b07bb47"), "name" : "sosop", "age" : 26, "gender" : "male", "birthday" : ISODate("1996-03-11T00:00:00Z"), "email" : "sosopish@163.com", "phone" : [ "88888888888", "66666666666" ] }
> db.users.find({'name': 'sosop'},{'phone': {$slice: -1}})
{ "_id" : ObjectId("549567573359eef64b07bb47"), "name" : "sosop", "age" : 26, "gender" : "male", "birthday" : ISODate("1996-03-11T00:00:00Z"), "email" : "sosopish@163.com", "phone" : [ "99999999999" ] }
> db.users.find({'name': 'sosop'},{'phone': {$slice: [2,3]}})
{ "_id" : ObjectId("549567573359eef64b07bb47"), "name" : "sosop", "age" : 26, "gender" : "male", "birthday" : ISODate("1996-03-11T00:00:00Z"), "email" : "sosopish@163.com", "phone" : [ "99999999999" ] }
> db.users.find({'name': 'sosop'},{'phone': {$slice: [1,2]}})
{ "_id" : ObjectId("549567573359eef64b07bb47"), "name" : "sosop", "age" : 26, "gender" : "male", "birthday" : ISODate("1996-03-11T00:00:00Z"), "email" : "sosopish@163.com", "phone" : [ "66666666666", "99999999999" ] }

 内嵌文档

db.users.find({'addr.city': 'Chengdu'})
db.users.find({'addr': {$elemMatch: {'city': 'Chengdu', 'country': 'China'}}})

 

 $where查询比常规长训慢

 

7.游标

> var cursor = db.users.find()
> while(cursor.hasNext()) {
... u = cursor.next()
... print(u.name)
... }
sosop
> cursor.forEach(function(u) {
... print(u.age)
... }
... )

 limit skip sort

> db.users.find()
{ "_id" : ObjectId("549567573359eef64b07bb47"), "name" : "sosop", "age" : 26, "gender" : "male", "birthday" : ISODate("1996-03-11T00:00:00Z"), "email" : "sosopish@163.com", "phone" : [ "88888888888", "66666666666", "99999999999" ] }
{ "_id" : ObjectId("549577f83359eef64b07bb48"), "name" : "net-sosop", "age" : 27, "gender" : "male", "birthday" : ISODate("1996-01-01T00:00:00Z") }
> db.users.find().limit(1)
{ "_id" : ObjectId("549567573359eef64b07bb47"), "name" : "sosop", "age" : 26, "gender" : "male", "birthday" : ISODate("1996-03-11T00:00:00Z"), "email" : "sosopish@163.com", "phone" : [ "88888888888", "66666666666", "99999999999" ] }
> db.users.find().skip(1)
{ "_id" : ObjectId("549577f83359eef64b07bb48"), "name" : "net-sosop", "age" : 27, "gender" : "male", "birthday" : ISODate("1996-01-01T00:00:00Z") }
> db.users.find().sort({'age': 1})
{ "_id" : ObjectId("549567573359eef64b07bb47"), "name" : "sosop", "age" : 26, "gender" : "male", "birthday" : ISODate("1996-03-11T00:00:00Z"), "email" : "sosopish@163.com", "phone" : [ "88888888888", "66666666666", "99999999999" ] }
{ "_id" : ObjectId("549577f83359eef64b07bb48"), "name" : "net-sosop", "age" : 27, "gender" : "male", "birthday" : ISODate("1996-01-01T00:00:00Z") }
> db.users.find().sort({'age': -1})
{ "_id" : ObjectId("549577f83359eef64b07bb48"), "name" : "net-sosop", "age" : 27, "gender" : "male", "birthday" : ISODate("1996-01-01T00:00:00Z") }
{ "_id" : ObjectId("549567573359eef64b07bb47"), "name" : "sosop", "age" : 26, "gender" : "male", "birthday" : ISODate("1996-03-11T00:00:00Z"), "email" : "sosopish@163.com", "phone" : [ "88888888888", "66666666666", "99999999999" ] }

 避免使用skip过滤大量数据

 

8.高级查询

$maxscan : integer

$max : document

$min :document

$explain: boolean

$hint: documnet

$snapshot: boolean

 

9.索引

建立索引

db.users.ensureIndex({'name': 1})

 注意多键创建索引时,索引的方向

索引缺点:每次cud时都会有额外的开销

索引名称:

db.users.ensureIndex({'name': 1}, {‘name’: 'name'm 'unique': true, 'dropDups': true})

 explain和hint

db.users.find().explain()

 

10.地理空间索引

db.users.ensureIndex({'gps': '2d'}, {$min: 100,$max: 1000})
db.users.find({'gps': {$near: [200,80]}})

 $within $box $center

 

11.聚合

count

db.users.count({})

group

db.users.group({key: {age: true}, initial: {"age": 0}, $reduce: function(doc, prev){ if (doc.age > prev.age) { prev.age = doc.age }}, condition: {age: {$gt: 26}}})

 finalize完成器

 函数作为键:$keyf: function(x) {}

 

MapReduce:

并行化到多个服务器的聚合方法

map reduce finalize keeptemp output query limit sort scope  verbose

db.users.mapReduce(map, reduce, {out: 'tmp', sort: {age: 1}, limit: 1}

 

分享到:
评论

相关推荐

    mongodb常用命令大全

    - **示例**: 输入 `help` 或者 `db.help()` 可以查看基本操作命令的帮助。 ##### 2. 切换/创建数据库 (Use/Create Database) - **命令格式**: `use yourDB` - **功能描述**: 如果指定的数据库不存在,则会自动创建...

    MongoDB常用命令批处理

    在管理和操作MongoDB时,批处理脚本是一个高效的方法,特别是对于执行重复性的任务,如安装、启动、停止和配置服务。以下是根据提供的文件名解析出的MongoDB相关知识点: 1. **安装MongoDB服务**: - `install.bat...

    mongodb常用命令.txt

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

    MongoDB常用操作命令大全

    MongoDB常用操作命令大全 数据库常用命令 Collection聚集集合 用户相关 聚集集合查询

    mongoDb 常用命令

    mongodb php distinct command --- mongoDb 常用命令

    MongoDB常用命令汇总

    包含对数据库、集合、文档的常用操作。

    MongoDB常用命令

    MongoDB 常用命令 MongoDB 是一个流行的 NoSQL 数据库,提供了丰富的命令来管理和维护数据库。在本文中,我们将介绍一些 MongoDB 常用的命令,包括集合命令、数据库命令和其他命令。 集合命令 1. `db.collection....

    Mongodb常用命令和java调用

    MongoDB 使用C++编写,支持多种操作系统,并提供了丰富的查询语言,类似于面向对象的查询,允许执行类似关系数据库的单表查询操作,还支持建立索引来提升查询效率。此外,MongoDB 支持动态模式,即schema-free,这...

    mongoDB常用命令1

    - `db.help()`:显示当前数据库可用的操作命令。 - `db.yourColl.help()`:针对特定集合提供帮助,例如`yourColl`集合。 - `db.youColl.find().help()`:关于`find`查询方法的帮助。 2. **切换/创建数据库** - ...

    mongodb常用命令.docx

    在日常使用中,MongoDB的这些命令对于数据的管理、查询和维护至关重要。通过灵活运用这些命令,开发者可以高效地处理和管理大规模的非结构化和半结构化数据,实现高并发和高性能的数据访问。由于其优秀的性能表现和...

    MongoDB常用的操作命令.txt

    ### MongoDB常用操作命令详解 #### 一、启动与配置MongoDB服务 在开始介绍具体的数据库操作之前,我们先了解如何启动和配置MongoDB服务。以下是一些常用的命令: 1. **启动MongoDB服务(默认数据目录)** ```...

    MongoDB常用命令手册.zip

    本手册涵盖了MongoDB的基础操作,旨在帮助初学者快速掌握其核心命令,以下是15条常用命令的详细说明: 1. **启动MongoDB服务**:在命令行中输入`mongod`启动MongoDB服务器,通常需要指定数据存储目录,如`mongod --...

    mongodb 操作命令(全)

    以下是一些主要的MongoDB操作命令的详细解释: 1. **数据库相关操作**: - `use &lt;database&gt;`:切换当前工作数据库。例如,`use myDatabase` 将会切换到名为myDatabase的数据库。 - `db`:显示当前工作数据库。 -...

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

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

    MongoDB数据库常用命令.docx

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

    MongoDB常用SQL操作

    以下是一些关于MongoDB常用SQL操作的关键知识点: 1. **数据模型**:MongoDB基于JSON(JavaScript Object Notation)格式的文档存储数据,这使得它能够存储复杂的数据结构,如嵌套对象和数组。 2. **连接MongoDB**...

    MongoDB常用SQL操作.pdf

    在MongoDB中,常用的操作语句可以分为数据定义语言(DDL)和数据操纵语言(DML)。 **DDL操作:** 1. 创建集合(表) - 语法:`db.createCollection("collectionName")` - 实例:创建一个名为`user2`的集合,...

    mongodb常用命令

    以下是一些MongoDB的常用命令及其详细解释: 1. **创建集合(Collection)**: - `db.createCollection("mycoll", {capped:true,size:100000})`: 这个命令用于创建一个名为`mycoll`的集合,并设置为上限为100000...

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

    本教程将详细介绍MongoDB在Linux环境下的安装步骤,并提供常用命令及实际案例,帮助您快速掌握MongoDB的操作。 首先,让我们来看如何在Linux系统上安装MongoDB。安装过程通常包括以下几个步骤: 1. **下载MongoDB*...

    mongodb的常用命令

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

Global site tag (gtag.js) - Google Analytics