返回顶部
首页 > 资讯 > 数据库 >MongoDB之数据查询(数组)
  • 891
分享到

MongoDB之数据查询(数组)

2024-04-02 19:04:59 891人浏览 独家记忆
摘要

首先在mongoDB里面是支持数组保存的,一旦支持了数组保存,就需要针对于数组的数据进行匹配。 范例:保存一部分数组内容 db.emp.insert({"name":"刘A","sex":"男","age

首先在mongoDB里面是支持数组保存的,一旦支持了数组保存,就需要针对于数组的数据进行匹配。

范例:保存一部分数组内容
db.emp.insert({"name":"刘A","sex":"男","age":35,"sal":8000,"loc":"北京","course":["语文","数学","英语","音乐","政治"]});
db.emp.insert({"name":"刘B","sex":"男","age":35,"sal":8000,"loc":"北京","course":["语文","数学"]});
db.emp.insert({"name":"刘C","sex":"男","age":35,"sal":8000,"loc":"北京","course":["语文","数学","英语"]});
db.emp.insert({"name":"刘D","sex":"男","age":35,"sal":8000,"loc":"北京","course":["语文","数学","政治"]});
db.emp.insert({"name":"刘E","sex":"男","age":35,"sal":8000,"loc":"北京","course":["语文","政治"]});

> db.emp.find().pretty();
{
        "_id" : ObjectId("599108423268c8e84253be26"),
        "name" : "赵一",
        "sex" : "男",
        "age" : 30,
        "sal" : 1000,
        "loc" : "北京"
}
{
        "_id" : ObjectId("599108423268c8e84253be27"),
        "name" : "钱二",
        "sex" : "女",
        "age" : 22,
        "sal" : 5000,
        "loc" : "上海"
}
{
        "_id" : ObjectId("599108423268c8e84253be28"),
        "name" : "孙三",
        "sex" : "男",
        "age" : 40,
        "sal" : 2000,
        "loc" : "深圳"
}
{
        "_id" : ObjectId("599108423268c8e84253be29"),
        "name" : "李四",
        "sex" : "女",
        "age" : 30,
        "sal" : 7000,
        "loc" : "北京"
}
{
        "_id" : ObjectId("599108423268c8e84253be2a"),
        "name" : "周五",
        "sex" : "女",
        "age" : 30,
        "sal" : 6400,
        "loc" : "北京"
}
{
        "_id" : ObjectId("599108423268c8e84253be2b"),
        "name" : "吴六",
        "sex" : "男",
        "age" : 30,
        "sal" : 2500,
        "loc" : "重庆"
}
{
        "_id" : ObjectId("599108423268c8e84253be2c"),
        "name" : "郑七",
        "sex" : "女",
        "age" : 50,
        "sal" : 4700,
        "loc" : "成都"
}
{
        "_id" : ObjectId("599108433268c8e84253be2d"),
        "name" : "王八",
        "sex" : "男",
        "age" : 35,
        "sal" : 8000,
        "loc" : "北京"
}
{
        "_id" : ObjectId("599129a00184ff511bf02b87"),
        "name" : "刘A",
        "sex" : "男",
        "age" : 35,
        "sal" : 8000,
        "loc" : "北京",
        "course" : [
                "语文",
                "数学",
                "英语",
                "音乐",
                "政治"
        ]
}
{
        "_id" : ObjectId("599129a00184ff511bf02b88"),
        "name" : "刘B",
        "sex" : "男",
        "age" : 35,
        "sal" : 8000,
        "loc" : "北京",
        "course" : [
                "语文",
                "数学"
        ]
}
{
        "_id" : ObjectId("599129a00184ff511bf02b89"),
        "name" : "刘C",
        "sex" : "男",
        "age" : 35,
        "sal" : 8000,
        "loc" : "北京",
        "course" : [
                "语文",
                "数学",
                "英语"
        ]
}
{
        "_id" : ObjectId("599129a00184ff511bf02b8a"),
        "name" : "刘D",
        "sex" : "男",
        "age" : 35,
        "sal" : 8000,
        "loc" : "北京",
        "course" : [
                "语文",
                "数学",
                "政治"
        ]
}
{
        "_id" : ObjectId("599129a20184ff511bf02b8b"),
        "name" : "刘E",
        "sex" : "男",
        "age" : 35,
        "sal" : 8000,
        "loc" : "北京",
        "course" : [
                "语文",
                "政治"
        ]
}

此时的数据包含有数组内容,而后需要针对数组数据进行判断,可以使用几个运算符:$all、$size、$slice、$elemMatch

范例:查询同时参加语文和数学课程的人员
现在两个数组内容都需要保存,所以使用“{"$all",[内容1,内容2,...]}”
> db.emp.find({"course":{"$all":["语文","数学"]}}).pretty();
{
        "_id" : ObjectId("599129a00184ff511bf02b87"),
        "name" : "刘A",
        "sex" : "男",
        "age" : 35,
        "sal" : 8000,
        "loc" : "北京",
        "course" : [
                "语文",
                "数学",
                "英语",
                "音乐",
                "政治"
        ]
}
{
        "_id" : ObjectId("599129a00184ff511bf02b88"),
        "name" : "刘B",
        "sex" : "男",
        "age" : 35,
        "sal" : 8000,
        "loc" : "北京",
        "course" : [
                "语文",
                "数学"
        ]
}
{
        "_id" : ObjectId("599129a00184ff511bf02b89"),
        "name" : "刘C",
        "sex" : "男",
        "age" : 35,
        "sal" : 8000,
        "loc" : "北京",
        "course" : [
                "语文",
                "数学",
                "英语"
        ]
}
{
        "_id" : ObjectId("599129a00184ff511bf02b8a"),
        "name" : "刘D",
        "sex" : "男",
        "age" : 35,
        "sal" : 8000,
        "loc" : "北京",
        "course" : [
                "语文",
                "数学",
                "政治"
        ]
}
现在所有显示的人员信息里面包含语文和数学的内容。而如果差一个内容的不会显示。
虽然“$all”计算可以用于数组上,但是也可以用于一个数据的匹配上。

范例:查询位置是“成都”的人员
> db.emp.find({"loc":{"$all":["成都"]}}).pretty();
{
        "_id" : ObjectId("599108423268c8e84253be2c"),
        "name" : "郑七",
        "sex" : "女",
        "age" : 50,
        "sal" : 4700,
        "loc" : "成都"

既然在集合里面现在保存的是数组信息,那么数组就可以利用索引操作,使用“key.index”的方式来定义索引。

范例:查询课程中第二个内容(index=1,索引下标从0开始)为数学的信息
> db.emp.find({"course.1":"数学"}).pretty();
{
        "_id" : ObjectId("599129a00184ff511bf02b87"),
        "name" : "刘A",
        "sex" : "男",
        "age" : 35,
        "sal" : 8000,
        "loc" : "北京",
        "course" : [
                "语文",
                "数学",
                "英语",
                "音乐",
                "政治"
        ]
}
{
        "_id" : ObjectId("599129a00184ff511bf02b88"),
        "name" : "刘B",
        "sex" : "男",
        "age" : 35,
        "sal" : 8000,
        "loc" : "北京",
        "course" : [
                "语文",
                "数学"
        ]
}
{
        "_id" : ObjectId("599129a00184ff511bf02b89"),
        "name" : "刘C",
        "sex" : "男",
        "age" : 35,
        "sal" : 8000,
        "loc" : "北京",
        "course" : [
                "语文",
                "数学",
                "英语"
        ]
}
{
        "_id" : ObjectId("599129a00184ff511bf02b8a"),
        "name" : "刘D",
        "sex" : "男",
        "age" : 35,
        "sal" : 8000,
        "loc" : "北京",
        "course" : [
                "语文",
                "数学",
                "政治"
        ]
}

范例:要求查询出只参加两门课程的人员
使用“$size”来进行数量控制
> db.emp.find({"course":{"$size":2}}).pretty();
{
        "_id" : ObjectId("599129a00184ff511bf02b88"),
        "name" : "刘B",
        "sex" : "男",
        "age" : 35,
        "sal" : 8000,
        "loc" : "北京",
        "course" : [
                "语文",
                "数学"
        ]
}
{
        "_id" : ObjectId("599129a20184ff511bf02b8b"),
        "name" : "刘E",
        "sex" : "男",
        "age" : 35,
        "sal" : 8000,
        "loc" : "北京",
        "course" : [
                "语文",
                "政治"
        ]
}

发现在进行数据查询的时候,只要内容符合条件,数组的内容就全备显示出来,希望控制返回的数量,可以使用“$slice”进行控制。

范例:返回年龄为35岁的所有人员,但是要求只显示两门参加的课程
> db.emp.find({"age":35},{"course":{"$slice":2}}).pretty();
{
        "_id" : ObjectId("599108433268c8e84253be2d"),
        "name" : "王八",
        "sex" : "男",
        "age" : 35,
        "sal" : 8000,
        "loc" : "北京"
}
{
        "_id" : ObjectId("599129a00184ff511bf02b87"),
        "name" : "刘A",
        "sex" : "男",
        "age" : 35,
        "sal" : 8000,
        "loc" : "北京",
        "course" : [
                "语文",
                "数学"
        ]
}
{
        "_id" : ObjectId("599129a00184ff511bf02b88"),
        "name" : "刘B",
        "sex" : "男",
        "age" : 35,
        "sal" : 8000,
        "loc" : "北京",
        "course" : [
                "语文",
                "数学"
        ]
}
{
        "_id" : ObjectId("599129a00184ff511bf02b89"),
        "name" : "刘C",
        "sex" : "男",
        "age" : 35,
        "sal" : 8000,
        "loc" : "北京",
        "course" : [
                "语文",
                "数学"
        ]
}
{
        "_id" : ObjectId("599129a00184ff511bf02b8a"),
        "name" : "刘D",
        "sex" : "男",
        "age" : 35,
        "sal" : 8000,
        "loc" : "北京",
        "course" : [
                "语文",
                "数学"
        ]
}
{
        "_id" : ObjectId("599129a20184ff511bf02b8b"),
        "name" : "刘E",
        "sex" : "男",
        "age" : 35,
        "sal" : 8000,
        "loc" : "北京",
        "course" : [
                "语文",
                "政治"
        ]
}
现在只取得了前两门的信息,那么也可以设置负数取出后两门信息。
> db.emp.find({"age":35},{"course":{"$slice":-2}}).pretty();
{
        "_id" : ObjectId("599108433268c8e84253be2d"),
        "name" : "王八",
        "sex" : "男",
        "age" : 35,
        "sal" : 8000,
        "loc" : "北京"
}
{
        "_id" : ObjectId("599129a00184ff511bf02b87"),
        "name" : "刘A",
        "sex" : "男",
        "age" : 35,
        "sal" : 8000,
        "loc" : "北京",
        "course" : [
                "音乐",
                "政治"
        ]
}
{
        "_id" : ObjectId("599129a00184ff511bf02b88"),
        "name" : "刘B",
        "sex" : "男",
        "age" : 35,
        "sal" : 8000,
        "loc" : "北京",
        "course" : [
                "语文",
                "数学"
        ]
}
{
        "_id" : ObjectId("599129a00184ff511bf02b89"),
        "name" : "刘C",
        "sex" : "男",
        "age" : 35,
        "sal" : 8000,
        "loc" : "北京",
        "course" : [
                "数学",
                "英语"
        ]
}
{
        "_id" : ObjectId("599129a00184ff511bf02b8a"),
        "name" : "刘D",
        "sex" : "男",
        "age" : 35,
        "sal" : 8000,
        "loc" : "北京",
        "course" : [
                "数学",
                "政治"
        ]
}
{
        "_id" : ObjectId("599129a20184ff511bf02b8b"),
        "name" : "刘E",
        "sex" : "男",
        "age" : 35,
        "sal" : 8000,
        "loc" : "北京",
        "course" : [
                "语文",
                "政治"
        ]
}
或者只是取出中间部分的信息。
> db.emp.find({"age":35},{"course":{"$slice":[1,2]}}).pretty();
{
        "_id" : ObjectId("599108433268c8e84253be2d"),
        "name" : "王八",
        "sex" : "男",
        "age" : 35,
        "sal" : 8000,
        "loc" : "北京"
}
{
        "_id" : ObjectId("599129a00184ff511bf02b87"),
        "name" : "刘A",
        "sex" : "男",
        "age" : 35,
        "sal" : 8000,
        "loc" : "北京",
        "course" : [
                "数学",
                "英语"
        ]
}
{
        "_id" : ObjectId("599129a00184ff511bf02b88"),
        "name" : "刘B",
        "sex" : "男",
        "age" : 35,
        "sal" : 8000,
        "loc" : "北京",
        "course" : [
                "数学"
        ]
}
{
        "_id" : ObjectId("599129a00184ff511bf02b89"),
        "name" : "刘C",
        "sex" : "男",
        "age" : 35,
        "sal" : 8000,
        "loc" : "北京",
        "course" : [
                "数学",
                "英语"
        ]
}
{
        "_id" : ObjectId("599129a00184ff511bf02b8a"),
        "name" : "刘D",
        "sex" : "男",
        "age" : 35,
        "sal" : 8000,
        "loc" : "北京",
        "course" : [
                "数学",
                "政治"
        ]
}
{
        "_id" : ObjectId("599129a20184ff511bf02b8b"),
        "name" : "刘E",
        "sex" : "男",
        "age" : 35,
        "sal" : 8000,
        "loc" : "北京",
        "course" : [
                "政治"
        ]
}
在此时设置的两个数据里面,第一个数据表示开始的位置,第二个数据表示个数。
您可能感兴趣的文档:

--结束END--

本文标题: MongoDB之数据查询(数组)

本文链接: https://lsjlt.com/news/49125.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • MongoDB之数据查询(数组)
    首先在MongoDB里面是支持数组保存的,一旦支持了数组保存,就需要针对于数组的数据进行匹配。 范例:保存一部分数组内容 db.emp.insert({"name":"刘A","sex":"男","age...
    99+
    2024-04-02
  • MongoDB之数据查询(数据排序)
    在MongoDB里面数据的排序操作使用“sort()”函数,在进行排序的时候可以有两个顺序:升序(1),降序(-1)。 范例:数据排序 > db.emp.find().sort({"sal":-1}...
    99+
    2024-04-02
  • MongoDB之数据查询(嵌套集合)
    在MongoDB数据库里面每一个集合数据可以继续保存其他的集合数据,例如有些人员保存家庭信息。 范例:增加数据 db.emp.insert({"name":"林A","sex":"男","age":22,...
    99+
    2024-04-02
  • mongodb如何查询数据
    mongodb中查询数据的方法:在mongodb中查询数据可以使用find() 方法,语法格式为:“db.collection.find(query, projection)”,其中collection指的是集合名称、query指的是指定查...
    99+
    2024-04-02
  • mongodb怎么查询数据
    mongodb 数据查询可使用以下命令:find():按条件查询文档。查询条件:指定条件,如文档属性、数组等。投影:指定返回字段,如 { title: 1, author: 1 }。排序...
    99+
    2024-04-02
  • php 数组查询几组数据
    PHP是一种广泛使用的服务器端脚本语言,它在Web开发中非常流行。而在PHP的开发过程中,数组查询是常见的操作之一。本文将从以下几个方面阐述如何在PHP中查询几组数据。一、基本数组查询首先,我们来了解PHP基本数组的查询方式。在PHP中,可...
    99+
    2023-05-19
  • 【MongoDB学习笔记17】MongoDB的查询:find中的数组查询
    db.post.find()    { "_id" : ObjectId("54a530c3ff0df3732bac1681"), "i...
    99+
    2024-04-02
  • php 查询数据库  数组
    在PHP开发中,数据库查询是必不可少的操作之一。 作为一种高效的动态语言,PHP提供了许多内置函数来帮助我们进行数据库操作。其中最重要的是PHP的数组。数组是PHP语言中最为重要和常用的结构之一。它们可以用于存储和操作数据,也可以将多个数据...
    99+
    2023-05-19
  • MongoDB中怎么查询数组下标
    这篇文章将为大家详细讲解有关MongoDB中怎么查询数组下标,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。  Mongodb的集合b中,保存了姓名...
    99+
    2024-04-02
  • MongoDB指定类型查询数据
    1.查看集合 show collections2.向集合中添加数据 db.runoob.insertMany([ { 'title':'data1', 'u...
    99+
    2024-04-02
  • mongodb查询有多少条数据
    mongodb中可以使用count()方法查询表中记录条数,mongodb查询有多少条数据的语句写法:“db.users.find().count();”,这里的users指的数据库的表名。以 test 数据库、trainers 集合为例使...
    99+
    2024-04-02
  • 如何在MongoDB中查询数据
    本篇文章给大家分享的是有关如何在MongoDB中查询数据,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。方法一:使用find()方法查询指定的键。db.student.find(...
    99+
    2023-06-14
  • mongodb怎么查询重复数据
    要查询重复数据,你可以使用MongoDB的聚合框架和聚合管道操作符来实现。以下是一种可能的解决方案:1. 使用$group操作符按照...
    99+
    2023-10-19
    mongodb
  • mongodb怎么查询所有数据
    在MongoDB中,可以使用find()方法查询所有数据。 示例: db.collection.find({}) 其中,`db`是数...
    99+
    2023-10-25
    mongodb
  • django数据查询之F查询和Q查询
    仅仅靠单一的关键字参数查询已经很难满足查询要求。此时Django为我们提供了F和Q查询: 1 # F 使用查询条件的值,专门取对象中某列值的操作 2 3 # from django.db.models import F ...
    99+
    2023-01-30
    数据查询 django
  • mongodb怎么查询并统计数组内个数
    在 MongoDB 中,可以使用聚合管道操作符 $size 来统计数组内的元素个数。以下是一个简单的例子,假设我们有一个名为 pro...
    99+
    2024-04-09
    mongodb
  • mongodb数组查询效率怎么提高
    要提高MongoDB数组查询的效率,可以考虑以下几个方面:1. 索引优化:为数组字段创建适当的索引,以加快查询速度。在创建索引时,可...
    99+
    2023-09-12
    mongodb
  • mongodb 之慢查询
    mongodb中慢查询日志 1.开启查询日志.(1)动态开启,可以选择性的对指定DB开启慢查询日志,但服务器重启后慢查询日志又要人工手动开启。db.setProfilingLevel(1,300)...
    99+
    2024-04-02
  • mongodb如何查询重复数据的条数
    mongodb中查询重复数据条数的方法:1、在cmd下进入mongdb目录中的bin文件夹;2、输入“mongod --dbpath (数据存放的文件夹)”命令启动mongodb服务;3、使用“show dbs”查看数据库;4、再使用“db...
    99+
    2024-04-02
  • mongodb中如何查询一个数据
    在MongoDB中,可以使用`db.collection.find()`方法来查询数据。例如,假设有一个名为`users`的集合,其...
    99+
    2023-08-30
    mongodb
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作