前面看到mongodb文档的字段的值可以嵌套一个文档,当然字段的值也可以嵌套一个数组。不过嵌套数组就比嵌套文档稍微复杂一些,因为数组既可以是基本数据类型的数组,也可以是文档类型的数组。为了逻辑的顺畅,先从嵌套基本数据类型的数组开始,然后过度到嵌套文档的数组。
#########################################################################
基本数据的数组:
1. 精确匹配 数组中值完全一样,值的顺序也一致
// 样例数据 { "_id" : 1, "score" : [ -1, 3 ] } { "_id" : 2, "score" : [ 1, 5 ] } { "_id" : 3, "score" : [ 1, 5, 6 ] } { "_id" : 4, "score" : [ 5, 6 ] } { "_id" : 5, "score" : [ 5, 1 ] } // 精确查询 db.students.find( { score: [1, 5] } ) // 匹配的只有一个 { "_id" : 2, "score" : [ 1, 5 ] } // 下面两个不会匹配 顺序不一样 个数不一样 { "_id" : 5, "score" : [ 5, 1 ] } { "_id" : 3, "score" : [ 1, 5, 6 ] }
2. 匹配数组单个元素 也就是数据中有一个元素等于查询的这个元素 就返回。
// 样例数据 { "_id" : 1, "score" : [ -1, 3 ] } { "_id" : 2, "score" : [ 1, 5 ] } { "_id" : 3, "score" : [ 1, 5, 6 ] } { "_id" : 4, "score" : [ 5, 6 ] } { "_id" : 5, "score" : [ 5, 1 ] } // 匹配数组一个元素 db.students.find( { score: 5 } ) // 返回的文档是 { "_id" : 2, "score" : [ 1, 5 ] }// 5 { "_id" : 3, "score" : [ 1, 5, 6 ] }// 5 { "_id" : 4, "score" : [ 5, 6 ] }// 5 { "_id" : 5, "score" : [ 5, 1 ] }// 5
3. 匹配数组多个元素 也就是所有的查询条件都可以在数组中找到匹配的元素,可以是单个元素满足所有条件,也可以是多个元素-每个元素只满足一个条件。
// 样例数据 { "_id" : 1, "score" : [ -1, 3 ] } { "_id" : 2, "score" : [ 1, 5 ] } { "_id" : 3, "score" : [ 1, 5, 6 ] } { "_id" : 4, "score" : [ 5, 6 ] } { "_id" : 5, "score" : [ 5, 1 ] } // 每个条件都有元素可以匹配 db.students.find( { score: { $gt: 0, $lt: 2 } } ) // 返回的文档是 { "_id" : 1, "score" : [ -1, 3 ] } // 3 -1 { "_id" : 2, "score" : [ 1, 5 ] }// 1 1 { "_id" : 3, "score" : [ 1, 5, 6 ] }// 1 1 { "_id" : 5, "score" : [ 5, 1 ] }// 1 1
4. 数组单个元素匹配多个条件 注意和上面的区别 这里指的是数组中存在至少一个元素满足所有的条件。
// 样例数据 { "_id" : 1, "score" : [ -1, 3 ] } { "_id" : 2, "score" : [ 1, 5 ] } { "_id" : 3, "score" : [ 1, 5, 6 ] } { "_id" : 4, "score" : [ 5, 6 ] } { "_id" : 5, "score" : [ 5, 1 ] } // 至少一个元素满足所有条件 db.students.find( { score: { $elemMatch: { $gt: 0, $lt: 2 } } } ) // 返回的文档是 { "_id" : 2, "score" : [ 1, 5 ] }// 1 { "_id" : 3, "score" : [ 1, 5, 6 ] }// 1 { "_id" : 5, "score" : [ 5, 1 ] }// 1
5. 建立索引
// 样例数据 { _id: 1, item: "ABC", ratings: [ 2, 5, 9 ] } { _id: 2, item: "ABC", ratings: [ 3, 8, 9 ] } // 对ratings字段建立索引 db.survey.createIndex( { ratings: 1 } )
#########################################################################
嵌套文档的数组:
// 样例数据 { _id: 1, name: "sue", age: 19, type: 1, status: "P", favorites: { artist: "Picasso", food: "pizza" }, finished: [ 17, 3 ], badges: [ "blue", "black" ], points: [ { points: 85, bonus: 20 }, { points: 85, bonus: 10 } ] }, { _id: 2, name: "bob", age: 42, type: 1, status: "A", favorites: { artist: "Miro", food: "meringue" }, finished: [ 11, 25 ], badges: [ "green" ], points: [ { points: 85, bonus: 20 }, { points: 64, bonus: 12 } ] }, { _id: 3, name: "ahn", age: 22, type: 2, status: "A", favorites: { artist: "Cassatt", food: "cake" }, finished: [ 6 ], badges: [ "blue", "red" ], points: [ { points: 81, bonus: 8 }, { points: 55, bonus: 20 } ] }, { _id: 4, name: "xi", age: 34, type: 2, status: "D", favorites: { artist: "Chagall", food: "chocolate" }, finished: [ 5, 11 ], badges: [ "red", "black" ], points: [ { points: 53, bonus: 15 }, { points: 51, bonus: 15 } ] }, { _id: 5, name: "xyz", age: 23, type: 2, status: "D", favorites: { artist: "Noguchi", food: "nougat" }, finished: [ 14, 6 ], badges: [ "orange" ], points: [ { points: 71, bonus: 20 } ] }, { _id: 6, name: "abc", age: 43, type: 1, status: "A", favorites: { food: "pizza", artist: "Picasso" }, finished: [ 18, 12 ], badges: [ "black", "blue" ], points: [ { points: 78, bonus: 8 }, { points: 57, bonus: 7 } ] }
1. 组合元素满足查询条件 对于每一个条件都可以找到嵌套文档匹配
// db.users.find( { 'points.points': { $lte: 55, "$gt": 80 } } ) // { "_id" : 3, "name" : "ahn", "age" : 22, "type" : 2, "status" : "A", "favorites" : { "artist" : "Cassatt", "food" : "cake" }, "finished" : [ 6 ], "badges" : [ "blue", "red" ], "points" : [ { "points" : 81, "bonus" : 8 }, { "points" : 55, "bonus" : 20 } ]// 55 81 }
2. 单个文档满足多个查询条件 有两种情况 一种是一个字段多个限制 一种是多个字段限制
相关推荐
### MongoDB 使用手册知识点详解 #### 一、MongoDB简介 **功能特点** - **面向文档存储**:MongoDB...这些知识点覆盖了MongoDB的基础介绍、安装配置以及常用的基本命令操作,对于初学者来说是非常有用的参考资料。
### MongoDB知识点学习手册 #### 一、Mongodb简介 MongoDB 是一个开源的、面向文档存储的数据库系统,属于 NoSQL 数据库的一种。其名称来源于单词 "humongous"(巨大的),表明 MongoDB 设计用于处理大规模的数据...
第2章:MongoDB基础知识 - 文档:是 MongoDB 中的基本数据单元,以 JSON/BSON 格式存储。 - 集合:文档的容器,可以包含多个文档。 - 动态模式:集合中的文档可以有不同的结构。 - 命名:集合的名称可以是任意 UTF...
### MongoDB基础知识概览 #### MongoDB简介 MongoDB是一款开源、高性能、无模式的文档型数据库管理系统,属于NoSQL数据库的一种。它使用JSON格式的数据结构来存储数据,支持多种数据类型,具备灵活的数据模型,适用...
以下是对MongoDB基础知识的详细阐述: 1. 文档、集合和数据库 - **文档**:MongoDB的核心单位是文档,类似于JSON对象,由键值对构成,键为字符串,不可为空。MongoDB文档支持多种数据类型,包括字符串、数字、数组...
在“MongoDB实战 班克”这本书中,作者深入浅出地介绍了MongoDB的基础知识以及实践技巧,旨在帮助读者快速掌握MongoDB的使用。 1. MongoDB基础: - 数据模型:MongoDB采用JSON格式的BSON(Binary JSON)作为数据...
### MongoDB学习手册知识点详解 #### 一、MongoDB简介 - **名称来源**:MongoDB的名称来源于英文单词“humongous”,意指其能够处理海量数据的能力。 - **定位**:MongoDB是一款开源的、面向文档存储的NoSQL数据库...
### MongoDB学习手册知识点详解 #### 一、MongoDB简介 - **名称来源**:MongoDB的名称来源于英文单词“humongous”,意指其能够处理海量数据的能力。 - **定位**:MongoDB是一款开源的、面向文档存储的NoSQL...
本学习文档旨在为初学者提供全面的MongoDB知识,涵盖从基础概念到高级操作的各个方面。 1. MongoDB 概述 1.1 介绍 MongoDB 是一个混合型数据库,融合了文档数据库、键值存储和关系型数据库的特性。它以JSON格式的...
### MongoDB核心知识点解析 #### MongoDB概述 MongoDB是一款高性能、开源、无模式的文档型数据库。作为一款介于关系数据库和非关系数据库之间的解决方案,MongoDB在很多应用场景中可以替代传统的关系型数据库或是...
1098.1.3 停止MongoDB 1108.2 监控 1108.2.1 使用管理接口 1108.2.2 serverStatus 1128.2.3 mongostat 1138.2.4 第三方插件 1138.3 安全和认证 1148.3.1 认证的基础知识 1148.3.2 认证的工作原理 ...
1078.1.2 配置文件 1098.1.3 停止MongoDB 1108.2 监控 1108.2.1 使用管理接口 1108.2.2 serverStatus 1128.2.3 mongostat 1138.2.4 第三方插件 1138.3 安全和认证 1148.3.1 认证的基础知识 1148.3...
MongoDB学习手册提供了大量的基础知识点和操作指导,对于理解MongoDB的架构、安装、数据类型、索引、同步、分片、安全性、常用操作以及图形化管理工具等方面都有很大的帮助。通过对这些内容的学习,可以快速掌握...
MongoDB 4系列的概述与安装教程主要涵盖了MongoDB的基础知识、主要特点、云数据库的使用,以及一些常用的MongoDB工具。MongoDB是一款强大的、基于分布式文件存储的文档型数据库,采用C++语言开发,其设计目标是为Web...
### JavaScript基础知识 1. **变量与数据类型**:JavaScript是动态类型的,允许在运行时声明和改变变量的数据类型。基础数据类型包括字符串、数字、布尔值、null、undefined和symbol(ES6新增)。 2. **控制结构**...