MongoDB 大数据技术之mongodb中在嵌套子文档的文档上面建立索引
一、给collection objectid赋自定义的值
MongoDB Enterprise > db.testid.insert({_id:{imsi:"4567890123",address:"测试数据"}})
MongoDB Enterprise > db.testid.createIndex({"_id.imsi":1})
MongoDB Enterprise > db.testid.createIndex({"_id.address":1})
MongoDB Enterprise > db.testid.createIndex({"_id:imsi":1,"_id.address":1})
二、查询嵌套
MongoDB Enterprise > db.testid.find().pretty()
{ "_id" : { "imsi" : "4567890123", "address" : "测试数据" } }
{ "_id" : { "imsi" : "4567890123", "address" : "测试数据", "id" : 123 } }
MongoDB Enterprise > db.testid.find({"_id.imsi":"4567890123"})
{ "_id" : { "imsi" : "4567890123", "address" : "测试数据" } }
{ "_id" : { "imsi" : "4567890123", "address" : "测试数据", "id" : 123 } }
三、转载文章
本篇文章探讨了大数据技术之mongodb中在嵌套子文档的文档上面建立索引,希望阅读本篇文章以后大家有所收获,帮助大家对相关内容的理解更加深入。
1.在mongodb的test库:
> db.data.insert({name:"1616",info:{url:"http://www.1616.net/",city:"beijing"}});
> db.data.insert({name:"hao123",info:{url:"http://www.hao123.com/",city:"beijing"}});
> db.data.insert({name:"ll4la",info:{url:"http://www.114la.com/",city:"dongguan"}});
2.对字段 info 创建索引:
> db.data.ensureIndex({info: 1});
3.data表的索引查询:
rs0:PRIMARY> db.data.getIndexes()
[
{
"v" : 1,
"key" : {
"_id" : 1
},
"name" : "_id_",
"ns" : "test.data"
},
{
"v" : 1,
"key" : {
"info" : 1
},
"name" : "info_1",
"ns" : "test.data"
}
]
4.索引的用法:
以下查询是可以用到info的索引的:
>db.data.find({info: {url:"http://www.1616.net/", city:"beijing"}});
>db.data.find({info: {url:"http://www.1616.net/"} });
>db.data.find({info: {city:"beijing"});
可以使用query.explain()查看索引的使用:
rs0:PRIMARY> db.data.find({info: {city:"beijing"}}).explain()
{
"queryPlanner" : {
"plannerVersion" : 1,
"namespace" : "test.data",
"indexFilterSet" : false,
"parsedQuery" : {
"info" : {
"$eq" : {
"city" : "beijing"
}
}
},
"winningPlan" : {
"stage" : "FETCH",
"inputStage" : {
"stage" : "IXSCAN",
"keyPattern" : {
"info" : 1
},
"indexName" : "info_1",
"isMultiKey" : false,
"isUnique" : false,
"isSparse" : false,
"isPartial" : false,
"indexVersion" : 1,
"direction" : "forward",
"indexBounds" : {
"info" : [
"[{ city: \"beijing\" }, { city: \"beijing\" }]"
]
}
}
},
"rejectedPlans" : [ ]
},
"serverInfo" : {
"host" : "mycentos.WORKGROUP",
"port" : 27017,
"version" : "3.2.8",
"gitVersion" : "ed70e33130c977bda0024c125b56d159573dbaf0"
},
"ok" : 1
}
但是这样的查询就不行:
>db.data.find({"info.city":"beijing"}); //字段部分必须加引号
>db.data.find({info.url:"..."});
这样的查询语句,只能使用类似的组合索引:
> db.data.ensureIndex({"info.url":1, "info.city":1});
5.组合索引
> db.data.ensureIndex({"info.url":1, "info.city":1});
即使查询时,与定义的排序相反,也是可以使用索引扫描的。
rs0:PRIMARY> db.data.find({"info.url": /http:*/i}).sort({"info.url": -1, "info.city":-1}).explain()
{
"queryPlanner" : {
"plannerVersion" : 1,
"namespace" : "test.data",
"indexFilterSet" : false,
"parsedQuery" : {
"info.url" : /http:*/i
},
"winningPlan" : {
"stage" : "FETCH",
"inputStage" : {
"stage" : "IXSCAN",
"filter" : {
"info.url" : /http:*/i
},
"keyPattern" : {
"info.url" : 1,
"info.city" : 1
},
"indexName" : "info.url_1_info.city_1",
"isMultiKey" : false,
"isUnique" : false,
"isSparse" : false,
"isPartial" : false,
"indexVersion" : 1,
"direction" : "backward",
"indexBounds" : {
"info.url" : [
"[/http:*/i, /http:*/i]",
"({}, \"\"]"
],
"info.city" : [
"[MaxKey, MinKey]"
]
}
}
},
"rejectedPlans" : [ ]
},
"serverInfo" : {
"host" : "mycentos.WORKGROUP",
"port" : 27017,
"version" : "3.2.8",
"gitVersion" : "ed70e33130c977bda0024c125b56d159573dbaf0"
},
"ok" : 1
}
部分整理自:http://m.zhizuobiao.com/technique/technique-19041500114/
MongoDB 大数据技术之mongodb中在嵌套子文档的文档上面建立索引的更多相关文章
- 大数据与 AI 生态中的开源技术总结
本文由云+社区发表 作者:堵俊平 在数据爆炸与智能革命的新时代,新的平台与应用层出不穷,开源项目推动了前沿技术和业界生态快速发展.本次分享将以技术和生态两大视角来看大数据和人工智能技术的发展,通过分析 ...
- Mongodb大数据语法大全
JSON和MONGODBJSON不止是一种交换数据的方式,也是一种存储数据的良好方式,实际上MONGODB并未使用JSON存储数据,而是使用由MONGODB团队开发的一种称为BSON的开放数据格式. ...
- 大数据技术生态圈形象比喻(Hadoop、Hive、Spark 关系)
[摘要] 知乎上一篇很不错的科普文章,介绍大数据技术生态圈(Hadoop.Hive.Spark )的关系. 链接地址:https://www.zhihu.com/question/27974418 [ ...
- 利用大数据技术处理海量GPS数据
我秀中国物联网地图服务平台目前接入的监控车辆近百万辆,每天采集GPS数据7亿多条,产生日志文件70GB,使用传统的数据处理方式非常耗时. 比如,仅仅对GPS做一些简单的统计分析,程序就需要几个小时才能 ...
- 【学习笔记】大数据技术原理与应用(MOOC视频、厦门大学林子雨)
1 大数据概述 大数据特性:4v volume velocity variety value 即大量化.快速化.多样化.价值密度低 数据量大:大数据摩尔定律 快速化:从数据的生成到消耗,时间窗口小,可 ...
- 除Hadoop大数据技术外,还需了解的九大技术
除Hadoop外的9个大数据技术: 1.Apache Flink 2.Apache Samza 3.Google Cloud Data Flow 4.StreamSets 5.Tensor Flow ...
- 参加2013中国大数据技术大会(BDTC2013)
2013年12月5日-6日参加了为期两天的2013中国大数据技术大会(Big Data Technology Conference, BDTC2013),本期会议主题是:“应用驱动的架构与技术 ”.大 ...
- 大数据技术人年度盛事! BDTC 2016将于12月8-10日在京举行
2016年12月8日-10日,由中国计算机学会(CCF)主办,CCF大数据专家委员会承办,中国科学院计算技术研究所和CSDN共同协办的2016中国大数据技术大会(Big Data Technology ...
- 大数据技术 vs 数据库一体机[转]
http://blog.sina.com.cn/s/blog_7ca5799101013dtb.html 目前,虽然大数据与数据库一体机都很火热,但相当一部分人却无法对深入了解这两者的本质区别.这里便 ...
随机推荐
- [Data Structure] LCSs——最长公共子序列和最长公共子串
1. 什么是 LCSs? 什么是 LCSs? 好多博友看到这几个字母可能比较困惑,因为这是我自己对两个常见问题的统称,它们分别为最长公共子序列问题(Longest-Common-Subsequence ...
- CDN 技术详解(DNS,GSLB,Cache)
CDN 是什么 CDN(Content Delivery Network,内容分发网络),即全网内容加速服务.为了尽可能的避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快.更稳 ...
- Linux设置静态IP
在做项目时由于公司局域网采用自动获取IP的方式,导到每次服务器重启主机IP都会变化.为了解决这个问题,我参考了http://blog.sina.com.cn/s/blog_537977e50100qh ...
- Ubuntu安装wps for linux
1.WPS For Linux 2013 还是只提供了32位版本,我用的是 64位 Ubuntu,如果您也是64位系统,还需要提前安装一些32位的库文件. sudo apt-get install i ...
- 读取proc信息的可扩展实现
需求 1. 将内存.线程数等信息注册到zk上进行监控 2. 统计信息,为下一步做负载均衡做准备. 实现 本文只解决问题1. 从网上查询了下,这些信息可以从proc文件系统中获取,如果不知道proc的, ...
- PLS-00306:错误解决思路 - OracleHelper 执行Oracle函数的坑
如果你是像我一样初次使用Net+Oracle的结合,我想你会跟我一样,有很大的概率碰到这个问题 ==================================================== ...
- 鼠标进入与离开的消息(覆盖CM_MOUSEENTER与CM_MOUSELEAVE消息)——Windows本身没有这样的消息
unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ...
- CSS 常用样式 提高网页编写速度
*{margin:0px;padding:0px;}/*内外边距初始化*/html, body, div, h1, h2, h3, h4, h5, h6, p, span, img, input, t ...
- Python爬虫入门教程 12-100 半次元COS图爬取
半次元COS图爬取-写在前面 今天在浏览网站的时候,忽然一个莫名的链接指引着我跳转到了半次元网站 https://bcy.net/ 打开之后,发现也没有什么有意思的内容,职业的敏感让我瞬间联想到了 c ...
- Leetcode: The Maze III(Unsolved Lock Problem)
There is a ball in a maze with empty spaces and walls. The ball can go through empty spaces by rolli ...