mongodb基础(代码片段)

xingweikun xingweikun     2023-02-03     110

关键词:


书接上文

MongoDB $type 操作符

$type操作符是基于BSON类型来检索集合中匹配的数据类型,并返回结果。

MongoDB 中可以使用的类型如下表所示:

> db.col.insert(
... title:'PHP教程',
... description: 'PHP 是一种创建动态交互性站点的强有力的服务器端脚本语言。',
... by:'xingweikun',
... url:'csdn',
... tags:['php'],
	likes:200
... )
WriteResult( "nInserted" : 1 )
> db.col.insert(
... title:'Java教程',
... description: 'Java 是由Sun Microsystems公司于1995年5月推出的高级程序设计语言。',
... by:'xingweikun',
... url:'csdn',
... tags:['java'],
... likes:100
... )
WriteResult( "nInserted" : 1 )
> db.col.insert(
... title:'MongoDB教程',
... description: 'MongoDB 是一个 Nosql 数据库',
... by:'xingweikun',
... url:'csdn',
... tags:['mongodb'],
... likes:150
... )
WriteResult( "nInserted" : 1 )
>
> db.col.find()
 "_id" : ObjectId("618d179d3b9d6667df7882b3"), "title" : "PHP教程", "description" : "PHP 是一种创建动态交互性站点的强有力的服务器端脚本语言。", "by" : "xingweikun", "url" : "csdn", "tags" : [ "php" ], "likes" : 200 
 "_id" : ObjectId("618d18da54bd2cbca7572cbd"), "title" : "Java教程", "description" : "Java 是由Sun Microsystems公司于1995年5月推出的高级程序设计语言。", "by" : "xingweikun", "url" : "csdn", "tags" : [ "java" ], "likes" : 100 
 "_id" : ObjectId("618d194854bd2cbca7572cbe"), "title" : "MongoDB教程", "description" : "MongoDB 是一个 Nosql 数据库", "by" : "xingweikun", "url" : "csdn", "tags" : [ "mongodb" ], "likes" : 150 
>

如果想获取 “col” 集合中 title 为 String 的数据,你可以使用以下命令:

> db.col.find("title":$type:2)
 "_id" : ObjectId("618d179d3b9d6667df7882b3"), "title" : "PHP教程", "description" : "PHP 是一种创建动态交互性站点的强有力的服务器端脚本语言。", "by" : "xingweikun", "url" : "csdn", "tags" : [ "php" ], "likes" : 200 
 "_id" : ObjectId("618d18da54bd2cbca7572cbd"), "title" : "Java教程", "description" : "Java 是由Sun Microsystems公司于1995年5月推出的高级程序设计语言。", "by" : "xingweikun", "url" : "csdn", "tags" : [ "java" ], "likes" : 100 
 "_id" : ObjectId("618d194854bd2cbca7572cbe"), "title" : "MongoDB教程", "description" : "MongoDB 是一个 Nosql 数据库", "by" : "xingweikun", "url" : "csdn", "tags" : [ "mongodb" ], "likes" : 150 
>
>> db.col.find("title":$type:'string')
 "_id" : ObjectId("618d179d3b9d6667df7882b3"), "title" : "PHP教程", "description" : "PHP 是一种创建动态交互性站点的强有力的服务器端脚本语言。", "by" : "xingweikun", "url" : "csdn", "tags" : [ "php" ], "likes" : 200 
 "_id" : ObjectId("618d18da54bd2cbca7572cbd"), "title" : "Java教程", "description" : "Java 是由Sun Microsystems公司于1995年5月推出的高级程序设计语言。", "by" : "xingweikun", "url" : "csdn", "tags" : [ "java" ], "likes" : 100 
 "_id" : ObjectId("618d194854bd2cbca7572cbe"), "title" : "MongoDB教程", "description" : "MongoDB 是一个 Nosql 数据库", "by" : "xingweikun", "url" : "csdn", "tags" : [ "mongodb" ], "likes" : 150 
>

MongoDB Limit与Skip方法

MongoDB Limit() 方法

显示查询文档中的两条记录

> db.col.find(,"title":1,_id:0).limit(2)
 "title" : "PHP教程" 
 "title" : "Java教程" 
> db.col.find(,"description":1,_id:0).limit(2)
 "description" : "PHP 是一种创建动态交互性站点的强有力的服务器端脚本语言。" 
 "description" : "Java 是由Sun Microsystems公司于1995年5月推出的高级程序设计语言。" 
>

MongoDB Skip() 方法

只显示第二条文档数据

> db.col.find(,"title":1,_id:0).limit(1).skip(1)
 "title" : "Java教程" 
> db.col.find(,"title":1,_id:0).limit(1).skip(2)
 "title" : "MongoDB教程" 
>

MongoDB 排序

MongoDB sort() 方法
col 集合中的数据按字段 likes 的降序排列:

> db.col.find(,"title":1,_id:0).sort("likes":-1)
 "title" : "PHP教程" 
 "title" : "MongoDB教程" 
 "title" : "Java教程" 

col 集合中的数据按字段 likes 的升序排列:

> db.col.find(,"title":1,_id:0).sort("likes":1)
 "title" : "Java教程" 
 "title" : "MongoDB教程" 
 "title" : "PHP教程" 
>

MongoDB 游标

方法名作用
hasNext判断是否有更多的文档
next用来获取下一条文档
toArray将查询结果放到数组中
count查询的结果为文档的总数量
limit限制查询结果返回数量
skip跳过指定数目的文档
sort对查询结果进行排序
objsLeftlnBatch查看当前批次剩余的未被迭代的文档数量
addOption为游标设置辅助选项,修改游标的默认行为
hint为查询强制使用指定索引
explain用于获取查询执行过程报告
snapshot对查询结果使用快照
> use xwk
switched to db xwk
> show collections
bjx
col
students
> var cursor=db.col.find()
> while (cursor.hasNext())
... var doc=cursor.next();
... print(doc.name);
... print(doc)
... printjson(doc);
... 


[unknown type]
[object BSON]

        "_id" : ObjectId("618d179d3b9d6667df7882b3"),
        "title" : "PHP教程",
        "description" : "PHP 是一种创建动态交互性站点的强有力的服务器端脚本语言。",
        "by" : "xingweikun",
        "url" : "csdn",
        "tags" : [
                "php"
        ],
        "likes" : 200

[unknown type]
[object BSON]

        "_id" : ObjectId("618d18da54bd2cbca7572cbd"),
        "title" : "Java教程",
        "description" : "Java 是由Sun Microsystems公司于1995年5月推出的高级程序设计语言。",
        "by" : "xingweikun",
        "url" : "csdn",
        "tags" : [
                "java"
        ],
        "likes" : 100

[unknown type]
[object BSON]

        "_id" : ObjectId("618d194854bd2cbca7572cbe"),
        "title" : "MongoDB教程",
        "description" : "MongoDB 是一个 Nosql 数据库",
        "by" : "xingweikun",
        "url" : "csdn",
        "tags" : [
                "mongodb"
        ],
        "likes" : 150

>

MongoDB 索引

索引通常能够极大的提高查询的效率,如果没有索引,MongoDB在读取数据时必须扫描集合中的每个文件并选取那些符合查询条件的记录。

这种扫描全集合的查询效率是非常低的,特别在处理大量的数据时,查询可以要花费几十秒甚至几分钟,这对网站的性能是非常致命的。

索引是特殊的数据结构,索引存储在一个易于遍历读取的数据集合中,索引是对数据库表中一列或多列的值进行排序的一种结构。

MongoDB的索引是基于B-tree数据结构及对应算法形成的。树索引存储特定字段或字段集的值,按字段值排序

MongoDB在创建集合时,会默认在_id字段上创建唯一索引。该索引可防止客户端插入具有相同字段的两个文档,_id字段上的索引不能被删除。在分片集群中,如果不将该_id字段用作分片键,则应用需要自定义逻辑来确保_id 字段中值的唯一性,通常通过使用标准的自生成的Objectld作为_id。

索引类型

单键索引

db.collection.createIndex(key:1)//1为升序,-1为降序
> db.records.insert(
... 
... "score":1034,
... "location":state:"NY",city:"New York"
... 
... )
WriteResult( "nInserted" : 1 )
> db.records.createIndex(score:1)
> db.records.find(score:1034)
 "_id" : ObjectId("618dec2a1d5efac384051bdf"), "score" : 1034, "location" :  "state" : "NY", "city" : "New York"  
>
查看查询过程
> db.records.find(score:1034).explain()

复合索引

注意顺序,顺序不同将导致查询的结果也不同

> db.records.createIndex("score":1,"location.state":1)

        "numIndexesBefore" : 2,
        "numIndexesAfter" : 3,
        "createdCollectionAutomatically" : false,
        "ok" : 1

>

多键值索引

> db.survey.insert(item:"ABC",ratings:[2,5,9])
WriteResult( "nInserted" : 1 )
> db.servey.createIndex(ratings:1)

        "numIndexesBefore" : 1,
        "numIndexesAfter" : 2,
        "createdCollectionAutomatically" : true,
        "ok" : 1

地理索引

> db.places.insert(
... 
... loc:type:"Point",coordinates:[-73.97,40.77],
... name:"Central Park",
... category:"Parks"
... 
... )
WriteResult( "nInserted" : 1 )
> db.places.insert(
... 
... loc:type:"Point",coordinates:[-73.88,40.78],
... name:"La Guardia Airport",
... category:"Airport"
... 
... )
WriteResult( "nInserted" : 1 )
> db.places.createIndex(loc:"2dsphere")

        "numIndexesBefore" : 1,
        "numIndexesAfter" : 2,
        "createdCollectionAutomatically" : false,
        "ok" : 1

>

索引操作

查看现有索引

> db.records.getIndexes()
[
        
                "v" : 2,
                "key" : 
                        "_id" : 1
                ,
                "name" : "_id_"
        ,
        
                "v" : 2,
                "key" : 
                        "score" : 1
                ,
                "name" : "score_1"
        ,
        
                "v" : 2,
                "key" : 
                        "score" : 1,
                        "location.state" : 1
                ,
                "name" : "score_1_location.state_1"
        
]
>

列出数据库的所有索引

> db.getCollectionNames().forEach(function(collection)
... 
... indexes=db[collection].getIndexes();
... print("Indexes for "+collection +":");
... printjson(indexes);
... );
Indexes for bjx:
[
        
                "v" : 2,
                "key" : 
                        "_id" : 1
                ,
                "name" : "_id_",
                "collation" : 
                        "locale" : "zh",
                        "caseLevel" : false,
                        "caseFirst" : "off",
                        "strength" : 3,
                        "numericOrdering" : false,
                        "alternate" : "non-ignorable",
                        "maxVariable" : "punct",
                        "normalization" : false,
                        "backwards" : false,
                        "version" : "57.1"
                
        
]
Indexes for col:
[
        
                "v" : 2,
                "key" : 
                        "_id" : 1
                ,
                "name" : "_id_"
        ,
        
                "v" : 2,
                "key" : 
                        "likes" : 1
                ,
                "name" : "likes_1"
        
]
Indexes for places:
[
        
                "v" : 2,
                "key" : 
                        "_id" : 1
                ,
                "name" : "_id_"
        ,
        
                "v" : 2,
                "key" : 
                        "loc" : "2dsphere"
                ,
                "name" : "loc_2dsphere",
                "2dsphereIndexVersion" : 3
        
]
Indexes for records:
[
        
                "v" : 2,
                "key" : 
                        "_id" : 1
                ,
                "name" : "_id_"
        ,
        
                "v" : 2,
                "key" : 
                        "score" : 1
                ,
                "name" : "score_1"
        ,
        
                "v" : 2,
                "key" : 
                        "score" : 1,
                        "location.state" : 1
                ,
                "name" : "score_1_location.state_1"
        
]
Indexes for servey:
[
        
                "v" : 2,
                "key" : 
                        "_id" : 1
                ,
                "name" : "_id_"
        ,
        
                "v" : 2,
                "key" : 
                        "ratings" : 1
                ,
                "name" : "ratings_1"
        
]
Indexes for students:
[  "v" : 2, "key" :  "_id" : 1 , "name" : "_id_"  ]
Indexes for survey:
[  "v" : 2, "key" :  "_id" : 1 , "name" : "_id_"  ]

查看集合索引大小

> db.records.totalIndexSize()
61440
>

删除索引

删除集合指定索引

> db.records.dropIndex("score":-1)

        "ok" : 0,
        "errmsg" : "can't find index with key:  score: -1.0 ",
        "code" : 27,
        "codeName" : "IndexNotFound"

>

没有这个索引,索引一定要写对名称和升序降序

> db.records.dropIndex("score":1)
 "nIndexesWas" : 3, "ok" : 1 
>

这样写就对了

删除集合所有索引

> db.col.dropIndexes()

        "nIndexesWas" : 2,
        "msg" : "non-_id indexes dropped for collection",
        "ok" : 1

>

修改索引

修改索引,则要删除现有索引并重新创建索引

MongoDB 聚合

聚合管道方法

类似于MySQL中的

select cust_id as _id,sum(amount) as total from orders where status like "%A%" group by cust_id;
> db.articles.insert([
... "_id":10,"author":"dave","score":80,"views":100查看详情  

mongodb基础以及一些聚合操作(代码片段)

MongoDB基础以及一些聚合操作​--洱涷zZ前情提要1.学习MongoDB的几大难点MongoDB是一种非关系型数据库,从mysql转变到Mongo需要摒弃传统的关系型数据库理念,不然很有可能会用一种错误的方式去使用和设计MongoDB基于JSON数据... 查看详情

mongodb基础以及一些聚合操作(代码片段)

MongoDB基础以及一些聚合操作​--洱涷zZ前情提要1.学习MongoDB的几大难点MongoDB是一种非关系型数据库,从mysql转变到Mongo需要摒弃传统的关系型数据库理念,不然很有可能会用一种错误的方式去使用和设计MongoDB基于JSON数据... 查看详情

零基础学习mongodb——集合操作(代码片段)

零基础学习MongoDB(四)——集合操作一、创建集合使用db.createCollection()方法来创建集合语法格式:db.createCollection(name,options)参数说明:name:要创建的集合名称options:可选参数,指定有关内存大小及索引的选项options可... 查看详情

零基础学习mongodb——集合操作(代码片段)

零基础学习MongoDB(四)——集合操作一、创建集合使用db.createCollection()方法来创建集合语法格式:db.createCollection(name,options)参数说明:name:要创建的集合名称options:可选参数,指定有关内存大小及索引的选项options可... 查看详情

mongodb学习专题(基础篇)mongodb入门(代码片段)

一.MongoDB介绍MongoDB是一个基于分布式文件存储的的开源数据库系统,由C++语言编写,旨在为WEB应用提供一个可扩展的、高性数据存储解决方案。它是一个介于关系数据库和非关系数据库之间的产品,是非关系数... 查看详情

其他技术----mongodb基础(代码片段)

MongoDB简单使用介绍MongoDBMongoDB是一种文档型数据库,它属于非关系型数据库。数据对象以BSON(二进制JSON)格式被存储在集合的文档中,而不是关系数据库的行和列中。MongoDB基本概念集合使用集合将数据编组,是一组用途相同的... 查看详情

零基础学习mongodb——mongodb简介(代码片段)

接下来会学习node.js以及mongodb数据库的知识,好好学习,天天向上!一、数据库简介数据库是按照数据结构来组织、存储和管理数据的仓库。我们的程序都是在内存中运行的,一旦程序运行结束或者计算机断电ÿ... 查看详情

零基础学习mongodb——mongodb简介(代码片段)

接下来会学习node.js以及mongodb数据库的知识,好好学习,天天向上!一、数据库简介数据库是按照数据结构来组织、存储和管理数据的仓库。我们的程序都是在内存中运行的,一旦程序运行结束或者计算机断电ÿ... 查看详情

零基础学习mongodb——管理用户(代码片段)

零基础学习MongoDB(三)——管理用户在b站上听了几个老师的课,有涉及到mongodb的一些历史,比如删库勒索,因此开放的数据库是很危险的,所以我们需要给它们添加管理用户,这样为我们的数据安全... 查看详情

零基础学习mongodb——管理用户(代码片段)

零基础学习MongoDB(三)——管理用户在b站上听了几个老师的课,有涉及到mongodb的一些历史,比如删库勒索,因此开放的数据库是很危险的,所以我们需要给它们添加管理用户,这样为我们的数据安全... 查看详情

零基础学习mongodb——连接数据库(代码片段)

一、安装MongoDB官网下载下载后,“下一步”安装即可二、启动MongoDB服务器命令行运行MongoDB服务,在安装完成之后会有MongoDB文件夹,运行bin目录下的mongod.exe文件或者可以将bin配置到环境变量path中三、连接数据库cmd命... 查看详情

零基础学习mongodb——连接数据库(代码片段)

一、安装MongoDB官网下载下载后,“下一步”安装即可二、启动MongoDB服务器命令行运行MongoDB服务,在安装完成之后会有MongoDB文件夹,运行bin目录下的mongod.exe文件或者可以将bin配置到环境变量path中三、连接数据库cmd命... 查看详情

nosql注入(代码片段)

NoSQL注入基本概念NoSQLMongoDBMemcachedRedisMongoDB初步MongoDB基础概念解析数据库(Database)文档(Document)集合(Collection)MongoDB基础语法解析MongoDB创建数据库MongoDB创建集合MongoDB插入文档MongoDB更新文档up 查看详情

nosql注入(代码片段)

NoSQL注入基本概念NoSQLMongoDBMemcachedRedisMongoDB初步MongoDB基础概念解析数据库(Database)文档(Document)集合(Collection)MongoDB基础语法解析MongoDB创建数据库MongoDB创建集合MongoDB插入文档MongoDB更新文档up 查看详情

centos7上安装mongodb及基础命令学习(代码片段)

安装MongoDB安装各个Linux平台依赖包>##RedHat/CentOS>sudoyuminstalllibcurlopenssl>>##Ubuntu18.04LTS("Bionic")/Debian10"Buster">apt-getinstalllibcur14openssl>>##Ubuntu16.04LTS(& 查看详情

mongodb基础(代码片段)

文章目录MongoDB$type操作符MongoDBLimit与Skip方法MongoDBLimit()方法MongoDBSkip()方法MongoDB排序MongoDB游标MongoDB索引索引类型单键索引复合索引多键值索引地理索引索引操作查看现有索引列出数据库的所有索引查看集合索引大小删除索引修... 查看详情

mongodb创建基础索引组合索引唯一索引以及优化(代码片段)

一、索引MongoDB提供了多样性的索引支持,索引信息被保存在system.indexes中,且默认总是为_id创建索引,它的索引使用基本和MySQL等关系型数据库一样。其实可以这样说说,索引是凌驾于数据存储系统之上的另一层系统,所以各种... 查看详情