前面看到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 设计用于处理大规模的数据...
### MongoDB基础知识概览 #### MongoDB简介 MongoDB是一款开源、高性能、无模式的文档型数据库管理系统,属于NoSQL数据库的一种。它使用JSON格式的数据结构来存储数据,支持多种数据类型,具备灵活的数据模型,适用...
以下是对MongoDB基础知识的详细阐述: 1. 文档、集合和数据库 - **文档**:MongoDB的核心单位是文档,类似于JSON对象,由键值对构成,键为字符串,不可为空。MongoDB文档支持多种数据类型,包括字符串、数字、数组...
### MongoDB学习手册知识点详解 #### 一、MongoDB简介 - **名称来源**:MongoDB的名称来源于英文单词“humongous”,意指其能够处理海量数据的能力。 - **定位**:MongoDB是一款开源的、面向文档存储的NoSQL数据库...
### MongoDB学习手册知识点详解 #### 一、MongoDB简介 - **名称来源**:MongoDB的名称来源于英文单词“humongous”,意指其能够处理海量数据的能力。 - **定位**:MongoDB是一款开源的、面向文档存储的NoSQL...
本学习文档旨在为初学者提供全面的MongoDB知识,涵盖从基础概念到高级操作的各个方面。 1. MongoDB 概述 1.1 介绍 MongoDB 是一个混合型数据库,融合了文档数据库、键值存储和关系型数据库的特性。它以JSON格式的...
本文旨在深入探讨MongoDB的基础知识,包括其核心特性、应用场景以及安装配置流程,帮助初学者快速掌握这一数据库技术。 #### MongoDB概述 MongoDB基于分布式文件存储,采用C++编写,是一种无模式的文档型数据库,...
### MongoDB核心知识点解析 #### MongoDB概述 MongoDB是一款高性能、开源、无模式的文档型数据库。作为一款介于关系数据库和非关系数据库之间的解决方案,MongoDB在很多应用场景中可以替代传统的关系型数据库或是...
MongoDB学习手册提供了大量的基础知识点和操作指导,对于理解MongoDB的架构、安装、数据类型、索引、同步、分片、安全性、常用操作以及图形化管理工具等方面都有很大的帮助。通过对这些内容的学习,可以快速掌握...
MongoDB 4系列的概述与安装教程主要涵盖了MongoDB的基础知识、主要特点、云数据库的使用,以及一些常用的MongoDB工具。MongoDB是一款强大的、基于分布式文件存储的文档型数据库,采用C++语言开发,其设计目标是为Web...
### JavaScript基础知识 1. **变量与数据类型**:JavaScript是动态类型的,允许在运行时声明和改变变量的数据类型。基础数据类型包括字符串、数字、布尔值、null、undefined和symbol(ES6新增)。 2. **控制结构**...