`
eksliang
  • 浏览: 598951 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

MongoDB查询(2)——数组查询[六]

阅读更多

MongoDB查询数组

转载请出自出处:http://eksliang.iteye.com/blog/2177292

一、概述

 MongoDB查询数组与查询标量值是一样的,例如,有一个水果列表,如下所示:

> db.food.find()
{ "_id" : "001", "fruits" : [ "苹果", "香蕉", "橘子" ] }
{ "_id" : "002", "fruits" : [ "苹果", "梨子", "橘子", "桃子" ] }
{ "_id" : "003", "fruits" : [ "圣女果", "梨子", "橘子", "桃子" ] }

 现在我要查询含有苹果的食品,实例如下:

> db.food.find({"fruits":"苹果"})
{ "_id" : "001", "fruits" : [ "苹果", "香蕉", "橘子" ] }
{ "_id" : "002", "fruits" : [ "苹果", "梨子", "橘子", "桃子" ] }

MongoDB查询数组时,查询条件会与每个元素进行比较,如果匹配上了,就算符合条件

 

 二、"$all"操作符

如果需要通过多个元素来匹配数组,就要用"$all"了。

还是下面这个水果列表:

> db.food.find()
{ "_id" : "001", "fruits" : [ "苹果", "香蕉", "橘子" ] }
{ "_id" : "002", "fruits" : [ "苹果", "梨子", "橘子", "桃子" ] }
{ "_id" : "003", "fruits" : [ "圣女果", "梨子", "橘子", "桃子" ] }

参考实例一:查询水果列表中既有苹果又有桃子的食品

> db.food.find({"fruits":{"$all":["苹果","桃子"]}}) --这是AND的关系
{ "_id" : "002", "fruits" : [ "苹果", "梨子", "橘子", "桃子" ] }

 这里的顺序没有任何关系。

数组都是可以通过下标访问的,MongoDB也不例外;

参考实例二:查询水果列表中下标为1的元素是梨子的食品

> db.food.find({"fruits.1":"梨子"})
{ "_id" : "002", "fruits" : [ "苹果", "梨子", "橘子", "桃子" ] }
{ "_id" : "003", "fruits" : [ "圣女果", "梨子", "橘子", "桃子" ] }

 

三、"$size"操作符

这个"$size"非常有用,顾名思义就是查询特定长度的数组。

参考实例一:查询food集合中frutis数组包含3个元素的文档

> db.food.find({"fruits":{"$size":3}})
{ "_id" : "001", "fruits" : [ "苹果", "香蕉", "橘子" ] }

查询一定长度范围内的文档时一种常见查询。"$size"并不能与其他查询条件(比如"$gt")组合使用;遇到这种业务怎么办?

答:遇到这种情况可以再文档中加一个size的键,每次往指定数组中添加一个元素就把size这个键的值加1;

参考实例如下

 原本更新语句如下:

db.food.update({"_id":"004"},{"$push":{"fruits":"苹果"}})

 现在需要变成如下:

db.food.update({"_id":"004"},{"$push":{"fruits":"苹果"},"$inc":{"size":1}})

 "$inc"自增长的速度非常快,对性能影响几乎微乎其微,这样建模以后就可以如下这么查询了

db.food.find({"size":{"$gt":3}}) --查询数组长度大于3的文档

 温馨提示:这种技巧并不能与"$addToSet"如果数组中已经存在该元素就不添加操作符一起使用。

 

三、"$slice"操作符

find方法的第二个参数是可选的,可以指定需要返回的列,"$slice"操作符用来返回某个键匹配数组元素的一个子集

例如下面有这样一个文档

db.test.insert({"_id":"t001","lists":["aa","bb","cc","ee","ff","gg"]})

 参考实例一:返回lists前3个元素

> db.test.find({},{"lists":{"$slice":3}})
{ "_id" : "t001", "lists" : [ "aa", "bb", "cc" ] }

 参考实例二:返回lists后3个元素

> db.test.find({},{"lists":{"$slice":-3}})
{ "_id" : "t001", "lists" : [ "ee", "ff", "gg" ] }

 参考实例三:从linsts中第2个元素开始,返回3个元素

> db.test.find({},{"lists":{"$slice":[2,3]}})
{ "_id" : "t001", "lists" : [ "cc", "ee", "ff" ] }

 

 

 

 

 

 

 

 

0
5
分享到:
评论

相关推荐

    MongoDB官网翻译(卷一)——简介.docx

    MongoDB 是一款流行的开源...文档内可以嵌套字段、数组和子文档,这种灵活性使得MongoDB特别适合处理复杂和动态的数据结构。使用MongoDB,开发者能够快速构建和扩展应用程序,同时享受到其强大的查询能力和高效的性能。

    MongoDB基础教程

    MongoDB提供了强大的查询语言——MQL(MongoDB Query Language),支持丰富的查询表达式和聚合框架。你可以根据字段、条件进行查询,并使用正则表达式、数组过滤等高级特性。 在性能方面,MongoDB支持索引,可以...

    MongoDB--全面.docx

    MongoDB还提供了一个交互式的后台管理工具——MongoDB Shell,它是一个基于JavaScript的命令行界面,允许用户直接与数据库进行交互,进行数据的插入、查询、更新和删除等操作。在MongoDB Shell中,用户可以直接运行...

    深入剖析 MongoDB 架构

    MongoDB 还有一个重要的组件——GridFS,用于存储大型文件。GridFS 将大文件拆分为多个小文件(Chunks),存储在 MongoDB 的集合中。这样可以方便地进行文件的存取和备份。 MongoDB 使用 BSON(Binary JSON)格式...

    NoSQL数据库MongoDB基础学习

    3. 支持动态查询,查询指令使用 JSON 形式的标记,可轻易查询文档中内嵌的对象及数组。 4. 支持完全索引,包含内部对象。 5. 支持复制和故障恢复,提供了主——从、主——主模式的数据复制及服务器之间的数据复制...

    mongoDB数据库

    MongoDB使用了类似于JSON的对象表示形式——BSON(Binary JSON)来存储数据,这种格式使得数据的存储更加高效且易于处理。 **BSON格式示例**: ```json {"username":"jack","age":20,"sex":"男"} ``` 这里的数据由...

    MongoDB document

    标题“MongoDB Document”直接指向了MongoDB的核心概念之一——文档。 #### 描述:MongoDB Develop Document **描述**部分提到的是“MongoDB开发文档”,这表明文档主要面向开发者群体,旨在为他们提供深入理解...

    Laravel开发-laravel-mongodb

    在本文中,我们将深入探讨如何在 Laravel 框架中集成 MongoDB 数据库,以及使用“Laravel-MongoDB”扩展包——Eloquent ORM(对象关系映射)的“MongoDB”版本,通常被称为“Jenssegers/Laravel-MongoDB”。...

    数据结构算法

    你也会(7篇)——第一篇 快速入门 MongoDB(8)8天学通MongoDB——第八天 驱动实践 8天学通MongoDB——第七天 运维技术 8天学通MongoDB——第六天 分片技术 8天学通MongoDB——第五天 主从复制 8天学通MongoDB——第四...

    把Mongodb和json-lib的简单整合——用于NOSQL学习

    它以其灵活的数据模型、丰富的查询语言以及对大规模数据处理的能力而备受赞誉。JSON(JavaScript Object Notation)则是一种轻量级的数据交换格式,因其易于人阅读和编写,同时也易于机器解析和生成,因此在Web服务...

    PHP使用mongoclient简单操作mongodb数据库示例

    2、需要事先熟悉《mongodb基础命令——进阶篇》的内容 3、其中更新数据部分只给出了一个$set的例子,但是跟操作命令是一样的,注意理解与尝试 4、在最下来有对函数进行简单的介绍,其中的一些内容会在本人学习完后续...

    mongo nodejs版管理工具

    4. **查询构建器**:对于更复杂的查询需求,adminMongo提供了一个查询构建器,允许你构建和执行各种MongoDB查询语句。 5. **数据导入/导出**:你可以将数据导出为JSON或CSV格式,也可以从这些文件导入数据,方便...

    .MongoDB.The.Definitive.Guide

    这两个字段虽然内容完全相同,但是指代的是同一本书——《MongoDB: The Definitive Guide》。这是一本详细介绍MongoDB数据库系统的权威指南。 #### 标签解析 - **标签**: "MongoDB.The.Definitive.Guide" 这个标签...

    MongoDB简单聚合函数.pdf

    除了这些简单的聚合函数外,MongoDB还提供了一个更强大的聚合框架——`aggregate`方法,它允许用户通过一系列的阶段(pipeline stages)进行数据处理,如`$match`、`$group`、`$sort`、`$project`等,实现更复杂的...

    PHP实例开发源码——php搜查找搜索引擎.zip

    2. **数据存储**:抓取的网页内容需要存储起来以便后续处理。PHP可以与各种数据库系统交互,如MySQL、PostgreSQL、SQLite等,用于存储和检索网页内容。此外,也可以使用NoSQL数据库如MongoDB,适合大规模非结构化...

    php操作mongoDB实例分析

    为了使PHP能够操作MongoDB,需要安装MongoDB的PHP扩展——MongoDB PHP驱动程序。这个驱动程序支持MongoDB的各种功能,包括但不限于数据的插入、查询、更新和删除等操作。 实例分析中,首先介绍了创建MongoDB连接的...

Global site tag (gtag.js) - Google Analytics