MongoDB进阶

MongoDB进阶

1、$type操作符

用途:使用MongoDB时,在需要根据字段的类型来查询数据时,可以使用$type操作符来完成。

语法:db.collection.find({字段:{$type:类型}})

其中,类型的值可以使用以下列出的

Type Number Alias Notes
Double 1 “double”
String 2 “string”
Object 3 “object”
Array 4 “array”
Binary data 5 “binData”
Undefined 6 “undefined” Deprecated.
ObjectId 7 “objectId”
Boolean 8 “bool”
Date 9 “date”
Null 10 “null”
Regular Expression 11 “regex”
DBPointer 12 “dbPointer” Deprecated.
JavaScript 13 “javascript”
Symbol 14 “symbol” Deprecated.
JavaScript (with scope) 15 “javascriptWithScope”
32-bit integer 16 “int”
Timestamp 17 “timestamp”
64-bit integer 18 “long”
Decimal128 19 “decimal” New in version 3.4.
Min key -1 “minKey”
Max key 127 “maxKey”

示例:

db.my_collection.insert({"name":"rlxy93","age":21})
WriteResult({ "nInserted" : 1 })
> db.my_collection.insert({"name":"lxy","age":22})
WriteResult({ "nInserted" : 1 })
> db.my_collection.find()
{ "_id" : ObjectId("5dec9fe3a849a105badc5d27"), "name" : "rlxy93", "age" : 21 }
{ "_id" : ObjectId("5dec9feda849a105badc5d28"), "name" : "lxy", "age" : 22 }
> db.my_collection.find({age:{$type:"double"}})
{ "_id" : ObjectId("5dec9fe3a849a105badc5d27"), "name" : "rlxy93", "age" : 21 }
{ "_id" : ObjectId("5dec9feda849a105badc5d28"), "name" : "lxy", "age" : 22 }

2、条件操作符

用途:在查询过程中,需要大于某个值或小于某个值。

语法:db.collection.find({字段:{条件操作符:值}})

条件操作符可取的值有

(>) 大于 - $gt
(<) 小于 - $lt
(>=) 大于等于 - $gte
(<= ) 小于等于 - $lte

示例:

> db.my_collection.find({age:{$gt:21}})
{ "_id" : ObjectId("5dec9feda849a105badc5d28"), "name" : "lxy", "age" : 22 }

3、聚合函数

用途:在查询过程中,需要获取某一列的总和,平均值等。

介绍:基本聚合函数有三种:count,distinct和group。

count

用途:统计符合条件的文档的数量。

语法:db.collection.count(query)或db.collection.find(query).count()

示例:

> db.my_collection.find({age:{$gt:20}})
{ "_id" : ObjectId("5dec9fe3a849a105badc5d27"), "name" : "rlxy93", "age" : 21 }
{ "_id" : ObjectId("5dec9feda849a105badc5d28"), "name" : "lxy", "age" : 22 }
> db.my_collection.find({age:{$gt:20}}).count()
2

distinct

用途:去除查询后的重复文档。

语法:db.collection.distinct(field,query)

示例:

> db.my_collection.find()
{ "_id" : ObjectId("5dec9fe3a849a105badc5d27"), "name" : "rlxy93", "age" : 21 }
{ "_id" : ObjectId("5dec9feda849a105badc5d28"), "name" : "lxy", "age" : 22 }
{ "_id" : ObjectId("5decaa9968bcf6e521e4d3aa"), "name" : "l", "age" : 21 }
> db.my_collection.distinct("age",{age:{$gt:20}})
[ 21, 22 ]

4、修改器

用途:用于更新操作。

取值:$inc,$set,$unset,$push,$pop,$pull,$upsert。

$inc

用途:对数值类型进行自增自减某个值。

示例:

> db.my_collection.update({"name":"rlxy93"},{$inc:{"age":1}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.my_collection.find()
{ "_id" : ObjectId("5dec9fe3a849a105badc5d27"), "name" : "rlxy93", "age" : 22 }
{ "_id" : ObjectId("5dec9feda849a105badc5d28"), "name" : "lxy", "age" : 22 }
{ "_id" : ObjectId("5decaa9968bcf6e521e4d3aa"), "name" : "l", "age" : 21 }
> db.my_collection.update({"name":"rlxy93"},{$inc:{"age":3}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.my_collection.find()
{ "_id" : ObjectId("5dec9fe3a849a105badc5d27"), "name" : "rlxy93", "age" : 25 }
{ "_id" : ObjectId("5dec9feda849a105badc5d28"), "name" : "lxy", "age" : 22 }
{ "_id" : ObjectId("5decaa9968bcf6e521e4d3aa"), "name" : "l", "age" : 21 }

$set

用途:指定键并更新键值,如果键不存在则创建。

示例:

> db.my_collection.update({"name":"rlxy93"},{$set:{"address":"chongqing"}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.my_collection.find()
{ "_id" : ObjectId("5dec9fe3a849a105badc5d27"), "name" : "rlxy93", "age" : 25, "address" : "chongqing" }
{ "_id" : ObjectId("5dec9feda849a105badc5d28"), "name" : "lxy", "age" : 22 }
{ "_id" : ObjectId("5decaa9968bcf6e521e4d3aa"), "name" : "l", "age" : 21 }
> db.my_collection.update({"name":"rlxy93"},{$set:{"address":"sichuan"}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.my_collection.find()
{ "_id" : ObjectId("5dec9fe3a849a105badc5d27"), "name" : "rlxy93", "age" : 25, "address" : "sichuan" }
{ "_id" : ObjectId("5dec9feda849a105badc5d28"), "name" : "lxy", "age" : 22 }
{ "_id" : ObjectId("5decaa9968bcf6e521e4d3aa"), "name" : "l", "age" : 21 }
#更改值中的键值,需要使用.连接符
> db.my_collection.insert({"name":"a","age":20,"list":{"a":"a","b":"b","c":"c"}})
WriteResult({ "nInserted" : 1 })
> db.my_collection.find()
{ "_id" : ObjectId("5dec9fe3a849a105badc5d27"), "name" : "rlxy93", "age" : 25, "address" : "sichuan" }
{ "_id" : ObjectId("5dec9feda849a105badc5d28"), "name" : "lxy", "age" : 22 }
{ "_id" : ObjectId("5decaa9968bcf6e521e4d3aa"), "name" : "l", "age" : 21 }
{ "_id" : ObjectId("5decb1ad68bcf6e521e4d3ad"), "name" : "a", "age" : 20, "list" : { "a" : "a", "b" : "b", "c" : "c" } }
> db.my_collection.update({"name":"a"},{$set:{"list.a":"A"}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.my_collection.find()
{ "_id" : ObjectId("5dec9fe3a849a105badc5d27"), "name" : "rlxy93", "age" : 25, "address" : "sichuan" }
{ "_id" : ObjectId("5dec9feda849a105badc5d28"), "name" : "lxy", "age" : 22 }
{ "_id" : ObjectId("5decaa9968bcf6e521e4d3aa"), "name" : "l", "age" : 21 }
{ "_id" : ObjectId("5decb1ad68bcf6e521e4d3ad"), "name" : "a", "age" : 20, "list" : { "a" : "A", "b" : "b", "c" : "c" } }

$unset

用途:删除键。

示例:

> db.my_collection.find()
{ "_id" : ObjectId("5dec9fe3a849a105badc5d27"), "name" : "rlxy93", "age" : 25, "address" : "sichuan" }
{ "_id" : ObjectId("5dec9feda849a105badc5d28"), "name" : "lxy", "age" : 22 }
{ "_id" : ObjectId("5decaa9968bcf6e521e4d3aa"), "name" : "l", "age" : 21 }
{ "_id" : ObjectId("5decb1ad68bcf6e521e4d3ad"), "name" : "a", "age" : 20, "list" : { "a" : "A", "b" : "b", "c" : "c" } }
> db.my_collection.update({"name":"a"},{$unset:{"list":-1}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.my_collection.find()
{ "_id" : ObjectId("5dec9fe3a849a105badc5d27"), "name" : "rlxy93", "age" : 25, "address" : "sichuan" }
{ "_id" : ObjectId("5dec9feda849a105badc5d28"), "name" : "lxy", "age" : 22 }
{ "_id" : ObjectId("5decaa9968bcf6e521e4d3aa"), "name" : "l", "age" : 21 }
{ "_id" : ObjectId("5decb1ad68bcf6e521e4d3ad"), "name" : "a", "age" : 20 }

$push

用途:向数组类型的键里面添加一个数组元素。

示例:

> db.my_collection.update({"name":"a"},{$push:{"list":0}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.my_collection.find()
{ "_id" : ObjectId("5dec9fe3a849a105badc5d27"), "name" : "rlxy93", "age" : 25, "address" : "sichuan" }
{ "_id" : ObjectId("5dec9feda849a105badc5d28"), "name" : "lxy", "age" : 22 }
{ "_id" : ObjectId("5decaa9968bcf6e521e4d3aa"), "name" : "l", "age" : 21 }
{ "_id" : ObjectId("5decb1ad68bcf6e521e4d3ad"), "name" : "a", "age" : 20, "list" : [ 0 ] }
> db.my_collection.update({"name":"a"},{$push:{"list":1}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.my_collection.find()
{ "_id" : ObjectId("5dec9fe3a849a105badc5d27"), "name" : "rlxy93", "age" : 25, "address" : "sichuan" }
{ "_id" : ObjectId("5dec9feda849a105badc5d28"), "name" : "lxy", "age" : 22 }
{ "_id" : ObjectId("5decaa9968bcf6e521e4d3aa"), "name" : "l", "age" : 21 }
{ "_id" : ObjectId("5decb1ad68bcf6e521e4d3ad"), "name" : "a", "age" : 20, "list" : [ 0, 1 ] }

$pop

用途:将数组类型的键值里面从头或者尾删除元素。

示例:

> db.my_collection.update({"name":"a"},{$pop:{"list":1}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.my_collection.find()
{ "_id" : ObjectId("5dec9fe3a849a105badc5d27"), "name" : "rlxy93", "age" : 25, "address" : "sichuan" }
{ "_id" : ObjectId("5dec9feda849a105badc5d28"), "name" : "lxy", "age" : 22 }
{ "_id" : ObjectId("5decaa9968bcf6e521e4d3aa"), "name" : "l", "age" : 21 }
{ "_id" : ObjectId("5decb1ad68bcf6e521e4d3ad"), "name" : "a", "age" : 20, "list" : [ 0, 1 ] }
> db.my_collection.update({"name":"a"},{$pop:{"list":-1}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.my_collection.find()
{ "_id" : ObjectId("5dec9fe3a849a105badc5d27"), "name" : "rlxy93", "age" : 25, "address" : "sichuan" }
{ "_id" : ObjectId("5dec9feda849a105badc5d28"), "name" : "lxy", "age" : 22 }
{ "_id" : ObjectId("5decaa9968bcf6e521e4d3aa"), "name" : "l", "age" : 21 }
{ "_id" : ObjectId("5decb1ad68bcf6e521e4d3ad"), "name" : "a", "age" : 20, "list" : [ 1 ] }

$pull

用途:删除满足条件的数组中的元素。

示例:

> db.my_collection.find()
{ "_id" : ObjectId("5dec9fe3a849a105badc5d27"), "name" : "rlxy93", "age" : 25, "address" : "sichuan" }
{ "_id" : ObjectId("5dec9feda849a105badc5d28"), "name" : "lxy", "age" : 22 }
{ "_id" : ObjectId("5decaa9968bcf6e521e4d3aa"), "name" : "l", "age" : 21 }
{ "_id" : ObjectId("5decb1ad68bcf6e521e4d3ad"), "name" : "a", "age" : 20, "list" : [ 1, 0, 2, 3, 4 ] }
> db.my_collection.update({"name":"a"},{$pull:{"list":3}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.my_collection.find()
{ "_id" : ObjectId("5dec9fe3a849a105badc5d27"), "name" : "rlxy93", "age" : 25, "address" : "sichuan" }
{ "_id" : ObjectId("5dec9feda849a105badc5d28"), "name" : "lxy", "age" : 22 }
{ "_id" : ObjectId("5decaa9968bcf6e521e4d3aa"), "name" : "l", "age" : 21 }
{ "_id" : ObjectId("5decb1ad68bcf6e521e4d3ad"), "name" : "a", "age" : 20, "list" : [ 1, 0, 2, 4 ] }

$upsert

用途:upsert是一种特殊的更新,如果没有符合条件的文档,就以upsert设置的条件来创建一个新的文档,如果有,则在已有的文档上进行更新。

示例:

> db.my_collection.update({"name":"b"},{$inc:{"age":22}},true)
WriteResult({
        "nMatched" : 0,
        "nUpserted" : 1,
        "nModified" : 0,
        "_id" : ObjectId("5decb7e26f15b1488bba141a")
})
> db.my_collection.find()
{ "_id" : ObjectId("5decb7e26f15b1488bba141a"), "name" : "b", "age" : 22 }

原文地址:https://www.cnblogs.com/Rlxy93/p/12010225.html

时间: 2024-10-12 03:47:41

MongoDB进阶的相关文章

MongoDB 进阶模式设计

转载: http://www.mongoing.com/mongodb-advanced-pattern-design 12月12日上午,TJ在开源中国的年终盛典会上分享了文档模型设计的进阶技巧,就让我们来回顾一下吧: —————————————————————————————————————————————————————————- 从很久以前,我就开始接触开源产品:从最开始的使用.受益者到后来的贡献者,到现在的热情推广者.现在,我是MongoDB的技术顾问.我的职责是为MongoDB的客户和

MongoDB 进阶-关联查询

[苏州需要工作的加我QQ,内推介绍费平分] MongoDB 进阶 1.数据库命令 a.命令的工作原理 drop命令,在shell中删除一个集合,执行db.refactor.drop().其实这个函数实际运行的是drop命令, 可以用runCommand来达到一样的效果: db.runCommand({"drop":"refactor"}) {         "nIndexesWas" : 1,         "msg" :

mongodb进阶一之高级查询

上篇文章我们讲了mongodb的crud基本操作 http://blog.csdn.net/stronglyh/article/details/46812579 这篇我们来说说mongodb的进阶--------------高级查询 一:各种查询 1:条件操作符 <, <=, >, >= 这个操作符就不用多解释了,最经常使用也是最简单的. db.collection.find({ "field" : { $gt: value } } ); // 大于: fiel

Ruby操作MongoDB(进阶六)-索引Indexing

在本博文中,我们主要介绍数据库索引.主要包含创建索引,删除索引,列出索引 数据库驱动提供了在集合上创建,删除和查看索引的方法. 创建索引 创建索引的操作中,可以一次创建一个索引,也可以一次创建多个索引.在3.0及其以上版本的MongoDB数据库中,多个索引一起创建时是被平行创建出来的.在更早的版本中,多个索引是按照顺序创建的. 单个索引的创建,使用create_one方法 client=Mongo::Client.new(['127.0.0.1:27017'],:database=>'film'

Ruby操作MongoDB(进阶)-CRUD操作

MongDB数据库的使用离不开CRUD操作.什么是CRUD,就是创建文档,读取文档信息,更新文档和删除文档. key-value键值对标记 在MongoDB的Ruby驱动中,Key_value键值多次出现.而且有时会出现语法上的巧合,这取决于在使用的Ruby版本中如何申明. 在文档创建步骤中,1.9及之后版本支持以下语法: document={name:"Tom",age:20}. 但是如果你使用的是2.2或者更高的版本,你可以用双引号将你的key包起来.如: document={&q

Ruby操作MongoDB(进阶)-创建数据库客户端连接

在Ruby的MongoDB2.4.3驱动版本中,通过创建一个Mongo::Client对象来构建一个Ruby的数据库连接.Mongo::Client构造器提供两种构造方式:一是通过提供主机列表和一些可选参数,另外还有通过一个连接URI.创建好的数据库连接默认连接到admin数据库. 1.使用Mongo::Client创建数据库客户端连接 1.1. 单服务器模式创建数据库连接 在单服务器模式下创建数据库连接,只需提供一个主机连接参数.另外,还可以通过消除自动发现步骤强制将集群拓扑转换为单机模式.可

MongoDB 进阶(GridFS)

?? GridFS是一种在MongoDB中存储大二进制文件的机制.使用GridFS存文件有如下几个原因: ● GridFS可以简化需求.如果已经用了MongoDB,GridFS就可以不需要独立的文件存储架构. ● GridFS利用已经建立的复制和分片机制,所以对于文件存储来说故障恢复和扩展都很容易. ● GridFS可以避免用于存储用户上传内容的文件系统出现的某些问题.例如:GridFS在同一目录下放置大量文件是没有任何问题的. ● GridFS不产生磁片,因为MongoDB分配的数据文件空间以

Ruby操作MongoDB(进阶八)-聚合操作Aggregation

上篇博文讲述了排序规则collations的操作和设置方式.顺带介绍了一部分聚合aggregation的设置方式.本文继续介绍聚合操作. 聚合框架的操作处理完数据记录后在返回计算结果.集合操作将来源于多个文档的值归类到一起,这样就可疑在被归类的数据上进行多种操作,然后返回一个单独的结果 1 聚合管道 聚合管道是用于数据聚合的一个框架,是以数据处理管道概念为原型.将文档输入一个多级管道后,可疑将文档转换为聚合的结果.下面以restaurants作为数据集,通过将餐馆类归类,我们就可以使用聚合管道在

MongoDB 进阶(命令\固定集合)

命令参考 查看MongoDB命令方法 ● 在shell中运行db.listCommands()命令 ● 在浏览器管理接口http://localhost:28017/_commands 下面是MongoDB最常使用的命令: ●  buildinfo 管理专用命令,返回MongoDB服务器的版本号和主机操作系统信息 >db.runCommand({"buildinfo":1}) { "version" :"2.4.14", "git