`

mongodb实践 3

 
阅读更多

 

#创建索引

 

*索引说白了是一种数据结构,这种数据结构通常用在优化检索效率上,mongodb的索引通过B-tree实现。

*获取things的索引@

> db.things.getIndexes()

		[
			{
				"name" : "_id_",
				"ns" : "test.things",
				"key" : {
					"_id" : 1
				}
			}
		]
 

_id是所有document都有的索引。

*在i上创建一个索引,之后things会有两个索引@

> db.things.ensureIndex({i:1});

		> db.things.getIndexes()
		[
			{
				"name" : "_id_",
				"ns" : "test.things",
				"key" : {
					"_id" : 1
				}
			},
			{
				"_id" : ObjectId("4ee86f3d9027000000001ba5"),
				"ns" : "test.things",
				"key" : {
					"i" : 1
				},
				"name" : "i_1"
			}
		]
 

说明一下:mongodb官网说@

写道

The name of an index is generated by concatenating the names of the indexed fields and their direction (i.e., 1 or -1 for ascending or descending). Index names (including their namespace/database), are limited to 128 characters.
 

也就是说命令db.things.ensureIndex({i:1});里面的1会与i连接在一起生成索引的名字,1代表升序、-1代表降序,索引名字的长度不可超过128个字符,事实上聚集(collection)也有这样的限制。

ensureIndex()函数的说明是这样的:

db.things.ensureIndex(keypattern,options) - options should be an object with these possible fields: name, unique, dropDups

 

写道

option values default
background true/false false
dropDups true/false false
unique true/false false
sparse true/false false
v index version. 0 = pre-v2.0, 1 = smaller/faster (current) 1 in v2.0. Default is used except in unusual situations.
 

mongodb创建索引是可以使用.号,下面是官网给出的例子@

db.factories.insert( { name: "xyz", metro: { city: "New York", state: "NY" } } );

		db.factories.ensureIndex( { "metro.city" : 1, "metro.state" : 1 } );
		// these queries can use the above index:
		db.factories.find( { "metro.city" : "New York", "metro.state" : "NY" } );
		db.factories.find( { "metro.city" : "New York" } );
		db.factories.find().sort( { "metro.city" : 1, "metro.state" : 1 } );
		db.factories.find().sort( { "metro.city" : 1 } )
 

 

*创建稀疏索引Sparse Indexes@

 

> db.people.ensureIndex({title : 1}, {sparse : true})

		> db.people.save({name:"Jim"})
		> db.people.save({name:"Sarah", title:"Princess"})
		> db.people.find()
		{ "_id" : ObjectId("4de6abd5da558a49fc5eef29"), "name" : "Jim" }
		{ "_id" : ObjectId("4de6abdbda558a49fc5eef2a"), "name" : "Sarah", "title" : "Princess" }
		> db.people.find().sort({title:1}) // only 1 doc returned because sparse
		{ "_id" : ObjectId("4de6abdbda558a49fc5eef2a"), "name" : "Sarah", "title" : "Princess" }
		> db.people.dropIndex({title : 1})
		{ "nIndexesWas" : 2, "ok" : 1 }
		> db.people.find().sort({title:1}) // no more index, returns all documents
		{ "_id" : ObjectId("4de6abd5da558a49fc5eef29"), "name" : "Jim" }
		{ "_id" : ObjectId("4de6abdbda558a49fc5eef2a"), "name" : "Sarah", "title" : "Princess" }
 

当使用Sparse Index的时候,某个没有title域的文档将不能被检索出。

 

*创建唯一索引@

db.things.ensureIndex({firstname: 1}, {unique: true});

		db.things.save({lastname: "Smith"});
		// Next operation will fail because of the unique index on firstname.
		db.things.save({lastname: "Jones"});
 

如果已有数据中有重复数据域,则在这个域上无法创建唯一索引,通过dropDups参数可以强制创建索引,使用该参数在创建索引的时候重复的数据会被无情的删除。

写道

A unique index cannot be created on a key that has pre-existing duplicate values. If you would like to create the index anyway, keeping the first document the database indexes and deleting all subsequent documents that have duplicate values, add the dropDups option.
db.things.ensureIndex({firstname : 1}, {unique : true, dropDups : true})
 

*注意mongodb支持复合索引@

例如db.things.ensureIndex({i: 1,i2: 1});与db.things.ensureIndex({i: 1});db.things.ensureIndex({i2: 1});是完全不同的!

 

*删除索引@

db.collection.dropIndexes();

		db.collection.dropIndex({i: 1})
 

*也可以通过命令删除@

// remove index with key pattern {y:1} from collection foo

		db.runCommand({dropIndexes:'foo', index : {y:1}})
		// remove all indexes:
		db.runCommand({dropIndexes:'foo', index : '*'})
 

 

#使用特权指令

 

*关闭数据库@

> use admin;

		> db.runCommand("shutdown");
 

或者,如果不是admin可以@

> db._adminCommand("shutdown");

 

或者这样@

> db.shutdownServer();

 

 

#复制数据库

*复制数据库mydb到test@

> db.copyDatabase("mydb", "test", "localhost");

		{ "ok" : 1 }
 

 

#关于MapReduce

 

官方例子1@

> m = function() { emit(this.user_id, 1); }

		> r = function(k,vals) { return 1; }
		> res = db.events.mapReduce(m, r, { query : {type:'sale'} });
		> // or in v1.8+:
		> // res = db.events.mapReduce(m, r, { query : {type:'sale'}, out : 'example1' });
		> db[res.result].find().limit(2)
		{ "_id" : 8321073716060 , "value" : 1 }
		{ "_id" : 7921232311289 , "value" : 1 }

		> r = function(k,vals) {
		...     var sum=0;
		...     for(var i in vals) sum += vals[i];
		...     return sum;
		... }
 

 

官方例子2@

$ ./mongo

		> db.things.insert( { _id : 1, tags : ['dog', 'cat'] } );
		> db.things.insert( { _id : 2, tags : ['cat'] } );
		> db.things.insert( { _id : 3, tags : ['mouse', 'cat', 'dog'] } );
		> db.things.insert( { _id : 4, tags : []  } );

		> // map function
		> m = function(){
		...    this.tags.forEach(
		...        function(z){
		...            emit( z , { count : 1 } );
		...        }
		...    );
		...};

		> // reduce function
		> r = function( key , values ){
		...    var total = 0;
		...    for ( var i=0; i<values.length; i++ )
		...        total += values[i].count;
		...    return { count : total };
		...};

		> res = db.things.mapReduce(m, r, { out : "myoutput" } );
		> res
		{
			"result" : "myoutput",
			"timeMillis" : 12,
			"counts" : {
				"input" : 4,
				"emit" : 6,
				"output" : 3
			},
			"ok" : 1,
		}
		> db.myoutput.find()
		{"_id" : "cat" , "value" : {"count" : 3}}
		{"_id" : "dog" , "value" : {"count" : 2}}
		{"_id" : "mouse" , "value" : {"count" : 1}}

		> db.myoutput.drop()
 

关于MR网上有许多细致的分析,本人感觉MR与分治的思想相似。

 

分享到:
评论

相关推荐

    MongoDB简介与实践.pdf

    3. 主流NoSQL分类: NoSQL数据库主要分为以下几类:面向文档的存储、Key-value的存储、列存储/列族。 4. MongoDB介绍: MongoDB是一种面向文档(Document)的NoSQL数据库,支持多平台如Windows、Linux、Mac OS X、...

    springboot整合mongodb实践操作

    springboot整合mongodb实践操作

    Mongodb最佳实践

    Mongodb是主流的NOSQL数据库之一,Mongodb最佳实践,详细介绍了Mongodb使用以及底层原理,和运维管理; 1.Mongodb数据结构,以及存储方式 2.增删改查使用,分页,排序,投影,以及多种扩展使用 3.丰富查询语句,比如...

    Mongodb结合D3数据展示

    总的来说,"Mongodb结合D3数据展示"是一个结合了大数据存储与实时可视化的实践案例,展示了如何利用现代Web技术处理和展现海量数据。通过学习和理解这个项目,开发者可以提升在大数据处理和交互式数据可视化方面的...

    studio-3t mongodb连接工具

    3. **脚本支持**:支持JavaScript和MongoDB Shell命令,方便执行脚本和命令操作。 4. **数据导入导出**:支持CSV、JSON、XML等多种格式的数据导入和导出,便于数据迁移和备份。 5. **性能监控**:提供实时的性能指标...

    mongodb 最佳实践

    MongoDB最佳实践是指一系列用于部署和管理MongoDB数据库的高级策略和技术,旨在确保数据库的高效运行、数据安全、以及系统的稳定性和可扩展性。MongoDB是一种高性能、可扩展的分布式文档数据库,广泛用于现代应用...

    视觉中国的MongoDB应用实践.pdf

    ### 视觉中国的MongoDB应用实践 #### 一、背景介绍 随着业务需求的变化和技术的发展,视觉中国在2011年的QCon北京会议上分享了其采用MongoDB作为数据库解决方案的过程与实践经验。这一转变旨在应对多数据源的需求、...

    网易游戏MongoDB数据备份与恢复实践.pdf

    网易游戏MongoDB数据备份与恢复实践 本文将详细介绍网易游戏MongoDB数据备份与恢复实践,涵盖了MongoDB在网易游戏端游数据中心的应用、扩展性、业务需求、priority=0资源情况等多方面的内容,并对MongoDB在网易游戏...

    关系型数据库迁移MongoDB实践.pptx

    【关系型数据库迁移MongoDB实践】的PPT涵盖了从规划到实施的整个迁移过程,重点关注Schema设计、应用迁移和数据迁移。以下是对这些关键知识点的详细说明: 1. **迁移规划**:在进行数据库迁移时,规划是至关重要的...

    mongodb 官方资料

    -涵盖了将数据从RDBMS移至MongoDB时的最佳实践和注意事项 MongoDB现代化记分卡 -使用它来确定哪些现有的旧版应用程序适合迁移到MongoDB 实践Medical_Claims_RDBMS_ERD和Medical_Claims_MongoDB -此方案适用于...

    万亿级文档数据库MongoDB集群性能优化实践.pdf

    知识点3: MongoDB 性能优化方法 MongoDB 性能优化方法包括优化 MongoDB 集群、解决 MongoDB 集群抖动问题、内部分享性能优化方法、给重点业务分享 MongoDB 原理等。 知识点4: MongoDB 用户群的重要性 MongoDB ...

    MongoDB 性能最佳实践

    在使用 MongoDB 构建高性能应用时,了解并实践性能优化策略至关重要。本篇文章将深入探讨 MongoDB 的性能最佳实践,旨在帮助你充分利用其潜力。 1. **数据模型设计** - **合适的文档结构**:设计紧凑且逻辑清晰的...

    2020年最新MongoDB 4.0专讲从入门到精通视频教程.txt

    day3:MongoDB增删改查操作实践 day4:教你学会MongoDB聚合操作 day5:索引的特性及应用 day6:MongoDB实例搭建仓位管理API day7:数据模型优化及设计 day8:复制集介绍及演练 day9:海量数据分片 day10:数据库认证与授权...

    mongodb-测试数据

    记住,实践是掌握任何技术的关键,尤其是像MongoDB这样的数据库管理系统。 总的来说,“mongodb-测试数据”这个压缩包为MongoDB的学习和测试提供了一个宝贵的资源库。通过深入研究和操作这些数据,你可以增强对...

    nosql实验六- MongoDB的安装与基本操作.docx

    3. 启动 MongoDB 服务 4. 将 MongoDB 作为 Windows 服务随机启动 5. 安装 MongoDB VUE 在 Windows 环境下安装 MongoDB 需要下载 MongoDB Windows 版,设置数据文件和日志文件的存放目录,启动 MongoDB 服务,并将其...

    MongoDB开发应用实践

    #### 四、MongoDB实践效果 ##### 选择MongoDB的原因: - **读写性能适中**:虽然不如Redis出色,但足够满足需求。 - **文档模型**:MongoDB的文档模型非常适合处理复杂的、变化的数据结构。 - **集群机制**:...

    MongoDB简介与实践

    ### MongoDB简介与实践 #### MongoDB概述 MongoDB是一款先进的、基于分布式文件存储的数据库系统,其核心编程语言为C++。这款数据库系统的设计初衷是为了满足Web应用对高性能、可扩展数据存储方案的需求。MongoDB...

Global site tag (gtag.js) - Google Analytics