一、给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中在嵌套子文档的文档上面建立索引的更多相关文章

  1. 大数据与 AI 生态中的开源技术总结

    本文由云+社区发表 作者:堵俊平 在数据爆炸与智能革命的新时代,新的平台与应用层出不穷,开源项目推动了前沿技术和业界生态快速发展.本次分享将以技术和生态两大视角来看大数据和人工智能技术的发展,通过分析 ...

  2. Mongodb大数据语法大全

    JSON和MONGODBJSON不止是一种交换数据的方式,也是一种存储数据的良好方式,实际上MONGODB并未使用JSON存储数据,而是使用由MONGODB团队开发的一种称为BSON的开放数据格式. ...

  3. 大数据技术生态圈形象比喻(Hadoop、Hive、Spark 关系)

    [摘要] 知乎上一篇很不错的科普文章,介绍大数据技术生态圈(Hadoop.Hive.Spark )的关系. 链接地址:https://www.zhihu.com/question/27974418 [ ...

  4. 利用大数据技术处理海量GPS数据

    我秀中国物联网地图服务平台目前接入的监控车辆近百万辆,每天采集GPS数据7亿多条,产生日志文件70GB,使用传统的数据处理方式非常耗时. 比如,仅仅对GPS做一些简单的统计分析,程序就需要几个小时才能 ...

  5. 【学习笔记】大数据技术原理与应用(MOOC视频、厦门大学林子雨)

    1 大数据概述 大数据特性:4v volume velocity variety value 即大量化.快速化.多样化.价值密度低 数据量大:大数据摩尔定律 快速化:从数据的生成到消耗,时间窗口小,可 ...

  6. 除Hadoop大数据技术外,还需了解的九大技术

    除Hadoop外的9个大数据技术: 1.Apache Flink 2.Apache Samza 3.Google Cloud Data Flow 4.StreamSets 5.Tensor Flow ...

  7. 参加2013中国大数据技术大会(BDTC2013)

    2013年12月5日-6日参加了为期两天的2013中国大数据技术大会(Big Data Technology Conference, BDTC2013),本期会议主题是:“应用驱动的架构与技术 ”.大 ...

  8. 大数据技术人年度盛事! BDTC 2016将于12月8-10日在京举行

    2016年12月8日-10日,由中国计算机学会(CCF)主办,CCF大数据专家委员会承办,中国科学院计算技术研究所和CSDN共同协办的2016中国大数据技术大会(Big Data Technology ...

  9. 大数据技术 vs 数据库一体机[转]

    http://blog.sina.com.cn/s/blog_7ca5799101013dtb.html 目前,虽然大数据与数据库一体机都很火热,但相当一部分人却无法对深入了解这两者的本质区别.这里便 ...

随机推荐

  1. spring Aop切面中的@Before @Around等执行顺序与请求参数统一解码

    1.背景 在实际开发中,我可能会对请求接口做统一日志输出,或者统一参数解析,验签,统一响应加密等,通常会用到aop,实际案例如下 2.代码 package com.qianxingniwo.log; ...

  2. C#使用表达式树动态调用方法并实现99乘法表

    我们在使用C#编程的时候,经常使用反射来动态调用方法,但有时候需要动态的生成方法,下面介绍使用表达式树的方式来自动生成方法,并调用. 首先需要说明什么是表达式,熟悉Linq的程序猿都用过类似于下面的代 ...

  3. python数据分析三剑客之: Numpy

    数据分析三剑客之: Numpy 一丶Numpy的使用 ​ numpy 是Python语言的一个扩展程序库,支持大维度的数组和矩阵运算.也支持针对数组运算提供大量的数学函数库 创建ndarray # 1 ...

  4. 用jQuery的offset()替代javascript的offset

    在项目中遇到了一个问题,获取某个块状元素的offsetTop和offsetLeft时候会出现问题,并不是相对浏览器的位置,而是相对于某一个块状元素的位置,具体参照元素也没找到,因为页面中没有设置pos ...

  5. BUAA-OO-2019 第三单元总结

    JML语言理论基础梳理及工具链 注释结构 JML以javadoc注释的方式来表示规格,每行都以@起头. 行注释://@annotation 块注释:/* @ annotation @*/ JML表达式 ...

  6. 回调、Promise、async-await

    第一章 异步:现在与将来 程序中现在运行的部分和将来运行的部分之间的关系就是异步编程的核心. 场景:等待用户输入.从数据库或文件系统中请求数据.通过网络 发送数据并等待响应,或者是在以固定时间间隔执行 ...

  7. Javascript/js 的浅拷贝与深拷贝(复制)学习随笔

    js变量的数据类型值分基本类型值和引用类型值. 在ES6(ECMAScript6)以前,基本数据类型包括String.Number.Boolean.Undefined.Null. 基本类型值的复制(拷 ...

  8. JAVA - Eclipse不能打断点的解决方法

    今天调试eclipse程序,莫名的就遇到这种问题. 解决: 在run菜单里面,把 “skip all breakpoints”  选项勾去即可. 如下图:

  9. Golang报错:Cannot convert expression of type interface{} to type []byte

    在使用golang实现后端登录逻辑的时候,碰到下面的问题:Cannot convert expression of type interface{} to type []byte 首先介绍下问题出现的 ...

  10. 上传文本到hdfs上的一些命令

    在hadoop下创建文件夹 bin/hdfs dfs -mkdir -p /usr/hadoop/spark/ touch wc.input  写一些文本进去. 上传到hdfs上  bin/hdfs ...