mongoDB's Multikeys feature

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
简介:
MongoDB provides an interesting "multikey" feature that can automatically index arrays of an object's values.
# 测试
> db.articles1.save( { name: "Warm Weather", author: "Digoal",  tags: ['weather', 'hot', 'record', 'april'] } )
> db.articles1.find()
{ "_id" : ObjectId("4d23e43f9ae655253f80e95e"), "name" : "Warm Weather", "author" : "Digoal", "tags" : [ "weather", "hot", "record", "april" ] }

> db.articles1.find( { tags: 'april' } )
{ "_id" : ObjectId("4d23e43f9ae655253f80e95e"), "name" : "Warm Weather", "author" : "Digoal", "tags" : [ "weather", "hot", "record", "april" ] }
# 使用[]之后就是精确匹配了
> db.articles1.find( { tags: ['april'] } )
# 使用$all的话表示包含所有[]列出的values的array
> db.articles1.find( { tags: {$all : ['april']} } )
{ "_id" : ObjectId("4d23e43f9ae655253f80e95e"), "name" : "Warm Weather", "author" : "Digoal", "tags" : [ "weather", "hot", "record", "april" ] }

# 很明显现在没有索引
> db.articles1.find( { tags: {$all : ['april']} } ).explain()
{
        "cursor" : "BasicCursor",
        "nscanned" : 1,
        "nscannedObjects" : 1,
        "n" : 1,
        "millis" : 0,
        "indexBounds" : {

        }
}

# array 上的索引
> db.articles1.ensureIndex( { tags : 1 } );
> db.articles1.find( { tags: {$all : ['april']} } ).explain()
{
        "cursor" : "BtreeCursor tags_1",
        "nscanned" : 1,
        "nscannedObjects" : 1,
        "n" : 1,
        "millis" : 0,
        "indexBounds" : {
                "tags" : [
                        [
                                "april",
                                "april"
                        ]
                ]
        }
}

# array中内嵌文档
db.articles2.save( { name: "Warm Weather", author: "Digoal",  tags: ['weather', 'hot', 'record', 'april'], comments : [{"nick" : "digoal" , "say" : "very good"},{"nick" : "francs" , "say" : "very good"}] } )
> db.articles2.find()                                                                 
{ "_id" : ObjectId("4d23e5109ae655253f80e960"), "name" : "Warm Weather", "author" : "Digoal", "tags" : [ "weather", "hot", "record", "april" ], "comments" : [
        {
                "nick" : "digoal",
                "say" : "very good"
        },
        {
                "nick" : "francs",
                "say" : "very good"
        }
] }

# 并行array不允许建立索引,原因是产生笛卡尔积
> db.articles3.save( { name: "Warm Weather", author: "Digoal",  tags: ['weather', 'hot', 'record', 'april'],"tags2" : ["ok"] } )
> db.articles3.ensureIndex( { tags : 1,tags2 :1} );                                                                             
cannot index parallel arrays [tags2] [tags]

# 单一的array可以和非array key组成复合索引 :
> db.articles3.ensureIndex( { tags : 1,name :1} );                                                                                 
> db.articles3.getIndexes()
[
        {
                "name" : "_id_",
                "ns" : "test.articles3",
                "key" : {
                        "_id" : 1
                }
        },
        {
                "_id" : ObjectId("4d23e6659ae655253f80e963"),
                "ns" : "test.articles3",
                "key" : {
                        "tags" : 1,
                        "name" : 1
                },
                "name" : "tags_1_name_1"
        }
]
目录
相关文章
|
JavaScript 前端开发 安全
开发业务需求有必要引入 TypeScript 吗?
随着前端技术的不断更新和发展,TypeScript作为一种静态类型的JavaScript超集语言,逐渐在业界崭露头角,尤其是在当今快速发展的软件开发环境中,选择适合的开发工具和技术变得至关重要。在项目规模和复杂性的增加的同时,保证代码质量、可读性和可维护性成为开发团队的重要任务。这样的背景下,引入TypeScript作为一种开发工具来弥补JavaScript的某些弱点,已经成为许多开发团队的选择。那么TypeScript是否值得在业务中引入?它是否会取代JavaScript?那么本文就来聊聊在业务开发过程中是否有必要引入TypeScript,并讨论一下对于现代前端框架发展的看法和期待。
250 0
开发业务需求有必要引入 TypeScript 吗?
|
机器学习/深度学习 算法 图形学
华为、腾讯开源AniPortrait:用音频、图片生成会说话的视频
【7月更文挑战第17天】华为腾讯联合开源AniPortrait,技术利用音频和图片生成栩栩如生的说话视频。通过音频分析面部表情,结合扩散模型与运动模块创建2D动画,实现自然的肖像动效。虽有高质量表现,但尚处研究阶段,面临隐私、伦理及应用局限性挑战。[论文链接](https://arxiv.org/abs/2403.17694)**
265 5
|
9月前
|
存储 缓存 分布式计算
Checkpoint 和持久化机制的区别?
Checkpoint 和持久化机制是分布式计算中的重要概念。Checkpoint 定期保存应用状态,用于故障恢复,特点是定期保存、状态恢复和一定的性能开销,广泛应用于流处理系统。持久化机制将数据从内存保存到磁盘等持久存储,确保数据在系统重启或故障后可用,特点是实时保存、数据持久性和较大的性能开销,常见于数据库系统。两者主要区别在于目的(故障恢复 vs 数据持久性)、频率(低频 vs 高频)和数据范围(中间状态 vs 最终结果)。
|
10月前
|
存储 云安全 安全
云标准:云计算标准
云计算标准涵盖基础设施、服务、安全、应用等多个方面,旨在提高系统的互操作性、可靠性和安全性。标准分为国际、区域、国家、行业和企业五个层次,由中国ISO、TC260、TC28等组织制定,如GB/T 29194-2012、GB/T 31168-2014等,为云计算技术的发展提供支持。
564 5
|
11月前
|
机器学习/深度学习 人工智能 运维
智能化运维:提升IT服务效率的新引擎###
本文深入浅出地探讨了智能化运维(AIOps)如何革新传统IT运维模式,通过大数据、机器学习与自动化技术,实现故障预警、快速定位与处理,从而显著提升IT服务的稳定性和效率。不同于传统运维依赖人工响应,AIOps强调预测性维护与自动化流程,为企业数字化转型提供强有力的支撑。 ###
|
监控 安全 Linux
在Linux中,如何查看和审计系统日志文件以检测异常活动?
在Linux中,如何查看和审计系统日志文件以检测异常活动?
|
小程序 JavaScript Java
基于Java微信小程序火锅店点餐系统设计和实现(源码+LW+调试文档+讲解等)
基于Java微信小程序火锅店点餐系统设计和实现(源码+LW+调试文档+讲解等)
|
机器学习/深度学习 数据可视化 索引
lasso路径可视化 python
【4月更文挑战第15天】
301 6
|
XML 存储 开发框架
c#教你网站数据轻松解析抓取,HtmlAgilityPack解析的奇妙之处
c#教你网站数据轻松解析抓取,HtmlAgilityPack解析的奇妙之处
527 0
|
数据可视化 Linux Docker
如何使用Docker部署Dashy并无公网ip远程访问管理界面
如何使用Docker部署Dashy并无公网ip远程访问管理界面
134 0