2023年7月21日发(作者:)
20211028Mongodb常⽤操作分组计算过滤参考链接:MongoDB 条件描述条件操作符⽤于⽐较两个表达式并从mongoDB集合中获取数据。在本章节中,我们将讨论如何在MongoDB中使⽤条件操作符。MongoDB中条件操作符有:(>) ⼤于 - $gt(<) ⼩于 - $lt(>=) ⼤于等于 - $gte(<= ) ⼩于等于 - $lte我们使⽤的数据库名称为"runoob" 我们的集合名称为"col",以下为我们插⼊的数据。为了⽅便测试,我们可以先使⽤以下命令清空集合 "col" 的数据:({})插⼊以下数据>({ title: 'PHP 教程',
description: 'PHP 是⼀种创建动态交互性站点的强有⼒的服务器端脚本语⾔。', by: '菜鸟教程', url: '', tags: ['php'], likes: 200})>({title: 'Java 教程',
description: 'Java 是由Sun Microsystems公司于1995年5⽉推出的⾼级程序设计语⾔。', by: '菜鸟教程', url: '', tags: ['java'], likes: 150})>({title: 'MongoDB 教程',
description: 'MongoDB 是⼀个 Nosql 数据库', by: '菜鸟教程', url: '', tags: ['mongodb'], likes: 100})使⽤find()命令查看数据:> (){ "_id" : ObjectId("56066542ade2f21f36b0313a"), "title" : "PHP 教程", "description" : "PHP 是⼀种创建动态交互性站点的强有⼒的服务器端脚本语⾔。",
"by" : "菜鸟教程", "url" : "", "tags" : [ "php" ], "likes" : 200 }{ "_id" : ObjectId("56066549ade2f21f36b0313b"), "title" : "Java 教程", "description" : "Java 是由Sun Microsystems公司于1995年5⽉推出的⾼级程序设计语⾔。", "by" : "菜鸟教程", "url" : "", "tags" : [ "java" ], "likes" : 150 }{ "_id" : ObjectId("5606654fade2f21f36b0313c"), "title" : "MongoDB 教程", "description" : "MongoDB 是⼀个 Nosql 数据库", "by" : "菜鸟教程", "url" :
"", "tags" : [ "mongodb" ], "likes" : 100 }MongoDB (>) ⼤于操作符 - $gt如果你想获取 "col" 集合中 "likes" ⼤于 100 的数据,你可以使⽤以下命令:({likes : {$gt : 100}})类似于SQL语句:Select * from col where likes > 100;输出结果:> ({likes : {$gt : 100}}){ "_id" : ObjectId("56066542ade2f21f36b0313a"), "title" : "PHP 教程", "description" : "PHP 是⼀种创建动态交互性站点的强有⼒的服务器端脚本语⾔。",
"by" : "菜鸟教程", "url" : "", "tags" : [ "php" ], "likes" : 200 }{ "_id" : ObjectId("56066549ade2f21f36b0313b"), "title" : "Java 教程", "description" : "Java 是由Sun Microsystems公司于1995年5⽉推出的⾼级程序设计语⾔。", "by" : "菜鸟教程", "url" : "", "tags" : [ "java" ], "likes" : 150 }>
MongoDB(>=)⼤于等于操作符 - $gte如果你想获取"col"集合中 "likes" ⼤于等于 100 的数据,你可以使⽤以下命令:({likes : {$gte : 100}})类似于SQL语句:Select * from col where likes >=100;输出结果:> ({likes : {$gte : 100}}){ "_id" : ObjectId("56066542ade2f21f36b0313a"), "title" : "PHP 教程", "description" : "PHP 是⼀种创建动态交互性站点的强有⼒的服务器端脚本语⾔。",
"by" : "菜鸟教程", "url" : "", "tags" : [ "php" ], "likes" : 200 }{ "_id" : ObjectId("56066549ade2f21f36b0313b"), "title" : "Java 教程", "description" : "Java 是由Sun Microsystems公司于1995年5⽉推出的⾼级程序设计语⾔。", "by" : "菜鸟教程", "url" : "", "tags" : [ "java" ], "likes" : 150 }{ "_id" : ObjectId("5606654fade2f21f36b0313c"), "title" : "MongoDB 教程", "description" : "MongoDB 是⼀个 Nosql 数据库", "by" : "菜鸟教程", "url" :
"", "tags" : [ "mongodb" ], "likes" : 100 }>
MongoDB (<) ⼩于操作符 - $lt如果你想获取"col"集合中 "likes" ⼩于 150 的数据,你可以使⽤以下命令:({likes : {$lt : 150}})类似于SQL语句:Select * from col where likes < 150;输出结果:> ({likes : {$lt : 150}}){ "_id" : ObjectId("5606654fade2f21f36b0313c"), "title" : "MongoDB 教程", "description" : "MongoDB 是⼀个 Nosql 数据库", "by" : "菜鸟教程", "url" :
"", "tags" : [ "mongodb" ], "likes" : 100 }MongoDB (<=) ⼩于等于操作符 - $lte如果你想获取"col"集合中 "likes" ⼩于等于 150 的数据,你可以使⽤以下命令:({likes : {$lte : 150}})类似于SQL语句:Select * from col where likes <= 150;输出结果:> ({likes : {$lte : 150}}){ "_id" : ObjectId("56066549ade2f21f36b0313b"), "title" : "Java 教程", "description" : "Java 是由Sun Microsystems公司于1995年5⽉推出的⾼级程序设计语⾔。", "by" : "菜鸟教程", "url" : "", "tags" : [ "java" ], "likes" : 150 }{ "_id" : ObjectId("5606654fade2f21f36b0313c"), "title" : "MongoDB 教程", "description" : "MongoDB 是⼀个 Nosql 数据库", "by" : "菜鸟教程", "url" :
"", "tags" : [ "mongodb" ], "likes" : 100 }MongoDB 使⽤ (<) 和 (>) 查询 - $lt 和 $gt如果你想获取"col"集合中 "likes" ⼤于100,⼩于 200 的数据,你可以使⽤以下命令:({likes : {$lt :200, $gt : 100}})类似于SQL语句:Select * from col where likes>100 AND likes<200;输出结果:> ({likes : {$lt :200, $gt : 100}}){ "_id" : ObjectId("56066549ade2f21f36b0313b"), "title" : "Java 教程", "description" : "Java 是由Sun Microsystems公司于1995年5⽉推出的⾼级程序设计语⾔。", "by" : "菜鸟教程", "url" : "", "tags" : [ "java" ], "likes" : 150 }>
MongoDB $type 操作符描述在本章节中,我们将继续讨论MongoDB中条件操作符 $type。$type操作符是基于BSON类型来检索集合中匹配的数据类型,并返回结果。MongoDB 中可以使⽤的类型如下表所⽰:类型DoubleStringObjectArray数字1234备注Binary dataUndefinedObject idBooleanDateNullRegular ExpressionJavaScriptSymbolJavaScript (with scope)32-bit integerTimestamp64-bit integerMin keyMax key567891718255127Query with -1.已废弃。我们使⽤的数据库名称为"runoob" 我们的集合名称为"col",以下为我们插⼊的数据。简单的集合"col":>({ title: 'PHP 教程',
description: 'PHP 是⼀种创建动态交互性站点的强有⼒的服务器端脚本语⾔。', by: '菜鸟教程', url: '', tags: ['php'], likes: 200})>({title: 'Java 教程',
description: 'Java 是由Sun Microsystems公司于1995年5⽉推出的⾼级程序设计语⾔。', by: '菜鸟教程', url: '', tags: ['java'], likes: 150})>({title: 'MongoDB 教程',
description: 'MongoDB 是⼀个 Nosql 数据库', by: '菜鸟教程', url: '', tags: ['mongodb'], likes: 100})使⽤find()命令查看数据:> (){ "_id" : ObjectId("56066542ade2f21f36b0313a"), "title" : "PHP 教程", "description" : "PHP 是⼀种创建动态交互性站点的强有⼒的服务器端脚本语⾔。",
"by" : "菜鸟教程", "url" : "", "tags" : [ "php" ], "likes" : 200 }{ "_id" : ObjectId("56066549ade2f21f36b0313b"), "title" : "Java 教程", "description" : "Java 是由Sun Microsystems公司于1995年5⽉推出的⾼级程序设计语⾔。", "by" : "菜鸟教程", "url" : "", "tags" : [ "java" ], "likes" : 150 }{ "_id" : ObjectId("5606654fade2f21f36b0313c"), "title" : "MongoDB 教程", "description" : "MongoDB 是⼀个 Nosql 数据库", "by" : "菜鸟教程", "url" :
"", "tags" : [ "mongodb" ], "likes" : 100 }MongoDB 操作符 - $type 实例如果想获取 "col" 集合中 title 为 String 的数据,你可以使⽤以下命令:({"title" : {$type : 2}})或({"title" : {$type : 'string'}})输出结果为:{ "_id" : ObjectId("56066542ade2f21f36b0313a"), "title" : "PHP 教程", "description" : "PHP 是⼀种创建动态交互性站点的强有⼒的服务器端脚本语⾔。",
"by" : "菜鸟教程", "url" : "", "tags" : [ "php" ], "likes" : 200 }{ "_id" : ObjectId("56066549ade2f21f36b0313b"), "title" : "Java 教程", "description" : "Java 是由Sun Microsystems公司于1995年5⽉推出的⾼级程序设计语⾔。", "by" : "菜鸟教程", "url" : "", "tags" : [ "java" ], "likes" : 150 }{ "_id" : ObjectId("5606654fade2f21f36b0313c"), "title" : "MongoDB 教程", "description" : "MongoDB 是⼀个 Nosql 数据库", "by" : "菜鸟教程", "url" :
"", "tags" : [ "mongodb" ], "likes" : 100 }MongoDB Limit与Skip⽅法MongoDB Limit() ⽅法如果你需要在MongoDB中读取指定数量的数据记录,可以使⽤MongoDB的Limit⽅法,limit()⽅法接受⼀个数字参数,该参数指定从MongoDB中读取的记录条数。语法limit()⽅法基本语法如下所⽰:>TION_().limit(NUMBER)实例集合 col 中的数据如下:{ "_id" : ObjectId("56066542ade2f21f36b0313a"), "title" : "PHP 教程", "description" : "PHP 是⼀种创建动态交互性站点的强有⼒的服务器端脚本语⾔。",
"by" : "菜鸟教程", "url" : "", "tags" : [ "php" ], "likes" : 200 }{ "_id" : ObjectId("56066549ade2f21f36b0313b"), "title" : "Java 教程", "description" : "Java 是由Sun Microsystems公司于1995年5⽉推出的⾼级程序设计语⾔。", "by" : "菜鸟教程", "url" : "", "tags" : [ "java" ], "likes" : 150 }{ "_id" : ObjectId("5606654fade2f21f36b0313c"), "title" : "MongoDB 教程", "description" : "MongoDB 是⼀个 Nosql 数据库", "by" : "菜鸟教程", "url" :
"", "tags" : [ "mongodb" ], "likes" : 100 }以下实例为显⽰查询⽂档中的两条记录:> ({},{"title":1,_id:0}).limit(2){ "title" : "PHP 教程" }{ "title" : "Java 教程" }>注:如果你们没有指定limit()⽅法中的参数则显⽰集合中的所有数据。MongoDB Skip() ⽅法我们除了可以使⽤limit()⽅法来读取指定数量的数据外,还可以使⽤skip()⽅法来跳过指定数量的数据,skip⽅法同样接受⼀个数字参数作为跳过的记录条数。语法skip() ⽅法脚本语法格式如下:>TION_().limit(NUMBER).skip(NUMBER)实例以下实例只会显⽰第⼆条⽂档数据>({},{"title":1,_id:0}).limit(1).skip(1){ "title" : "Java 教程" }>注:skip()⽅法默认参数为 0 。MongoDB 排序MongoDB sort() ⽅法在 MongoDB 中使⽤ sort() ⽅法对数据进⾏排序,sort() ⽅法可以通过参数指定排序的字段,并使⽤ 1 和 -1 来指定排序的⽅式,其中 1为升序排列,⽽ -1 是⽤于降序排列。语法sort()⽅法基本语法如下所⽰:>TION_().sort({KEY:1})实例col 集合中的数据如下:{ "_id" : ObjectId("56066542ade2f21f36b0313a"), "title" : "PHP 教程", "description" : "PHP 是⼀种创建动态交互性站点的强有⼒的服务器端脚本语⾔。",
"by" : "菜鸟教程", "url" : "", "tags" : [ "php" ], "likes" : 200 }{ "_id" : ObjectId("56066549ade2f21f36b0313b"), "title" : "Java 教程", "description" : "Java 是由Sun Microsystems公司于1995年5⽉推出的⾼级程序设计语⾔。", "by" : "菜鸟教程", "url" : "", "tags" : [ "java" ], "likes" : 150 }{ "_id" : ObjectId("5606654fade2f21f36b0313c"), "title" : "MongoDB 教程", "description" : "MongoDB 是⼀个 Nosql 数据库", "by" : "菜鸟教程", "url" :
"", "tags" : [ "mongodb" ], "likes" : 100 }以下实例演⽰了 col 集合中的数据按字段 likes 的降序排列:>({},{"title":1,_id:0}).sort({"likes":-1}){ "title" : "PHP 教程" }{ "title" : "Java 教程" }{ "title" : "MongoDB 教程" }>skip(), limilt(), sort()三个放在⼀起执⾏的时候,执⾏的顺序是先 sort(), 然后是 skip(),最后是显⽰的 limit()。MongoDB 索引MongoDB 索引索引通常能够极⼤的提⾼查询的效率,如果没有索引,MongoDB在读取数据时必须扫描集合中的每个⽂件并选取那些符合查询条件的记录。这种扫描全集合的查询效率是⾮常低的,特别在处理⼤量的数据时,查询可以要花费⼏⼗秒甚⾄⼏分钟,这对⽹站的性能是⾮常致命的。索引是特殊的数据结构,索引存储在⼀个易于遍历读取的数据集合中,索引是对数据库表中⼀列或多列的值进⾏排序的⼀种结构createIndex() ⽅法MongoDB使⽤ createIndex() ⽅法来创建索引。注意在 3.0.0 版本前创建索引⽅法为 Index(),之后的版本使⽤了 Index() ⽅法,ensureIndex() 还能⽤,但只是 createIndex() 的别名。语法createIndex()⽅法基本语法格式如下所⽰:>Index(keys, options)语法中 Key 值为你要创建的索引字段,1 为指定按升序创建索引,如果你想按降序来创建索引指定为 -1 即可。实例>Index({"title":1})>createIndex() ⽅法中你也可以设置使⽤多个字段创建索引(关系型数据库中称作复合索引)。>Index({"title":1,"description":-1})>createIndex() 接收可选参数,可选参数列表如下:ParameterTypeDescription建索引过程会阻塞其它数据库操作,background可指定以后台⽅式创建索引,即增加 "background" 可选参数。"background" 默认值为false。建⽴的索引是否唯⼀。指定为true创建唯⼀索引。默认值为false.索引的名称。如果未指定,MongoDB的通过连接索引的字段名和排序顺序⽣成⼀个索引名称。3.0+版本已废弃。在建⽴唯⼀索引时是否删除重复记录,指定 true 创建唯⼀索引。默认值为 false.对⽂档中不存在的字段数据不启⽤索引;这个参数需要特别注意,如果设置为true的话,在索引字段中不会查询出不包含对应字段的⽂档.。默认值为 false.指定⼀个以秒为单位的数值,完成 TTL设定,设定集合的⽣存时间。backgroundBooleanuniquenamedropDupsBooleanstringBooleansparseBooleanexpireAfterSecondsintegerindexversiondocumentstringstringv索引的版本号。默认的索引版本取决于mongod创建索引时运⾏的版本。weightsdefault_languagelanguage_override索引权重值,数值在 1 到 99,999 之间,表⽰该索引相对于其他索引字段的得分权重。对于⽂本索引,该参数决定了停⽤词及词⼲和词器的规则的列表。 默认为英语对于⽂本索引,该参数指定了包含在⽂档中的字段名,语⾔覆盖默认的language,默认值为 language.实例在后台创建索引:Index({open: 1, close: 1}, {background: true})通过在创建索引时加 background:true 的选项,让创建⼯作在后台执⾏1、查看集合索引exes()2、查看集合索引⼤⼩ndexSize()3、删除集合所有索引dexes()4、删除集合指定索引dex("索引名称")MongoDB 聚合MongoDB 中聚合(aggregate)主要⽤于处理数据(诸如统计平均值,求和等),并返回计算后的数据结果。有点类似 SQL 语句中的 count(*)。aggregate() ⽅法MongoDB中聚合的⽅法使⽤aggregate()。语法aggregate() ⽅法的基本语法格式如下所⽰:>TION_ate(AGGREGATE_OPERATION)实例集合中的数据如下:{ _id: ObjectId(7df78ad8902c) title: 'MongoDB Overview',
description: 'MongoDB is no sql database', by_user: '', url: '', tags: ['mongodb', 'database', 'NoSQL'], likes: 100},{ _id: ObjectId(7df78ad8902d) title: 'NoSQL Overview',
description: 'No sql database is very fast', by_user: '', url: '', tags: ['mongodb', 'database', 'NoSQL'], likes: 10},{ _id: ObjectId(7df78ad8902e) title: 'Neo4j Overview',
description: 'Neo4j is no sql database', by_user: 'Neo4j', url: '', tags: ['neo4j', 'database', 'NoSQL'], likes: 750},现在我们通过以上集合计算每个作者所写的⽂章数,使⽤aggregate()计算结果如下:> ate([{$group : {_id : "$by_user", num_tutorial : {$sum : 1}}}]){ "result" : [ { "_id" : "", "num_tutorial" : 2 }, { "_id" : "Neo4j", "num_tutorial" : 1 } ], "ok" : 1}>以上实例类似sql语句: select by_user, count(*) from mycol group by by_user在上⾯的例⼦中,我们通过字段 by_user 字段对数据进⾏分组,并计算 by_user 字段相同值的总和。下表展⽰了⼀些聚合的表达式:表达式描述实例ate([{$group : {_id : "$by_user", num_tutorial: {$sum : "$likes"}}}])ate([{$group : {_id : "$by_user", num_tutorial: {$avg : "$likes"}}}])ate([{$group : {_id : "$by_user", num_tutorial$sum计算总和。$avg计算平均值$min$max获取集合中所有⽂档对应值得最⼩值。获取集合中所有⽂档对应值得最⼤值。: {$min : "$likes"}}}])ate([{$group : {_id : "$by_user", num_tutorial: {$max : "$likes"}}}])ate([{$group : {_id : "$by_user", url : {$push:"$url"}}}])ate([{$group : {_id : "$by_user", url :{$addToSet : "$url"}}}])ate([{$group : {_id : "$by_user", first_url :{$first : "$url"}}}])ate([{$group : {_id : "$by_user", last_url :{$last : "$url"}}}])$push将值加⼊⼀个数组中,不会判断是否有重复的值。$addToSet将值加⼊⼀个数组中,会判断是否有重复的值,若相同的值在数组中已经存在了,则不加⼊。$first根据资源⽂档的排序获取第⼀个⽂档数据。$last根据资源⽂档的排序获取最后⼀个⽂档数据管道的概念管道在Unix和Linux中⼀般⽤于将当前命令的输出结果作为下⼀个命令的参数。MongoDB的聚合管道将MongoDB⽂档在⼀个管道处理完毕后将结果传递给下⼀个管道处理。管道操作是可以重复的。表达式:处理输⼊⽂档并输出。表达式是⽆状态的,只能⽤于计算当前聚合管道的⽂档,不能处理其它的⽂档。这⾥我们介绍⼀下聚合框架中常⽤的⼏个操作:$project:修改输⼊⽂档的结构。可以⽤来重命名、增加或删除域,也可以⽤于创建计算结果以及嵌套⽂档。$match:⽤于过滤数据,只输出符合条件的⽂档。$match使⽤MongoDB的标准查询操作。$limit:⽤来限制MongoDB聚合管道返回的⽂档数。$skip:在聚合管道中跳过指定数量的⽂档,并返回余下的⽂档。$unwind:将⽂档中的某⼀个数组类型字段拆分成多条,每条包含数组中的⼀个值。$group:将集合中的⽂档分组,可⽤于统计结果。$sort:将输⼊⽂档排序后输出。$geoNear:输出接近某⼀地理位置的有序⽂档。管道操作符实例1、$project实例ate( { $project : { title : 1 , author : 1 , }} );这样的话结果中就只还有_id,tilte和author三个字段了,默认情况下_id字段是被包含的,如果要想不包含_id话可以这样:ate( { $project : { _id : 0 , title : 1 , author : 1 }});2.$match实例ate( [ { $match : { score : { $gt : 70, $lte : 90 } } }, { $group: { _id: null, count: { $sum: 1 } } } ] );$match⽤于获取分数⼤于70⼩于或等于90记录,然后将符合条件的记录送到下⼀阶段$group管道操作符进⾏处理。3.$skip实例ate( { $skip : 5 });经过$skip管道操作符处理后,前五个⽂档被"过滤"掉。
发布者:admin,转转请注明出处:http://www.yc00.com/web/1689901336a293440.html
评论列表(0条)