热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

mongodb高级操作(2)-查询

1.查询文档find介绍mongodb中使用find来进行查询.find的第一个参数决定了要返回哪些文档,这个参数是一个文档,用于指定查询条件.如果不指定条件默认就是{},那么就是查询所有文档.db.test.find(){_id:ObjectId(573c858c323f7f2e2ccb0e17),name

1.查询文档find介绍 mongodb中使用find来进行查询.find的第一个参数决定了要返回哪些文档,这个参数是一个文档,用于指定查询条件.如果不指定条件默认就是{},那么就是查询所有文档. db . test . find () { _id : ObjectId ( 573c858c323f7f2e2ccb0e17 ), name

1.查询文档find介绍 mongodb中使用find来进行查询.find的第一个参数决定了要返回哪些文档,这个参数是一个文档,用于指定查询条件. 如果不指定条件默认就是{},那么就是查询所有文档.
> db.test.find(){ "_id" : ObjectId("573c858c323f7f2e2ccb0e17"), "name" : "brent", "age" : 43, "status" : "done" }{ "_id" : ObjectId("573c86d3017c5eb7d08aed6d"), "name" : "bob", "age" : 1, "status" : "done" }{ "_id" : ObjectId("573c88fe017c5eb7d08aed6e"), "name" : "tom", "age" : 10, "status" : "done" }{ "_id" : ObjectId("573c8bd3323f7f2e2ccb0e18"), "name" : "brent", "age" : 30, "status" : "done" }
向查询中指定键值,意味着限定查询条件,查询简单的类型只要指定要查找的值就行了:
> db.test.find({"name":"brent"}){ "_id" : ObjectId("573c858c323f7f2e2ccb0e17"), "name" : "brent", "age" : 43, "status" : "done" }{ "_id" : ObjectId("573c8bd3323f7f2e2ccb0e18"), "name" : "brent", "age" : 30, "status" : "done" }
可以在查询中指定多个键值对,以逗号隔开,这样的意思是条件1 AND 条件2 AND ....的意思:
> db.test.find({"name":"brent","age":43}){ "_id" : ObjectId("573c858c323f7f2e2ccb0e17"), "name" : "brent", "age" : 43, "status" : "done" }

指定返回的键

有时并不是需要返回所有的键,这时可以通过指定find或者findOne的第二个参数来指定想要的键,例如只想查询"name"为"brent"的name和age键: > db.test.find({"name":"brent"},{"name":1,"age":1})
{ "_id" : ObjectId("573c858c323f7f2e2ccb0e17"), "name" : "brent", "age" : 43 }{ "_id" : ObjectId("573c8bd3323f7f2e2ccb0e18"), "name" : "brent", "age" : 30 }
默认情况下_id都是会返回的,也可以使用第二个参数来剔除某个键,例如我们不希望得到status的键:
> db.test.find({"name":"brent"},{"status":0}){ "_id" : ObjectId("573c858c323f7f2e2ccb0e17"), "name" : "brent", "age" : 43 }{ "_id" : ObjectId("573c8bd3323f7f2e2ccb0e18"), "name" : "brent", "age" : 30 }
使用这种方法还可以将_id列剔除:
> db.test.find({"name":"brent"},{"status":0,"_id":0}){ "name" : "brent", "age" : 43 }{ "name" : "brent", "age" : 30 }

限制

查询传递的参数必须是常量,例如如果想查询一个文档中的某两个列相等的情况是不行的.

2.查询条件 查询除了上面简单介绍的精确匹配,还有更加复杂的查询,比如范围查询,or,and,取反等等

查询条件

"$lt","$lte","$gt","$gte"就是全部的比较操作符.分别对应着<,<=,>和>=,可以将这些组合起来以便查找一个范围的&#20540;. 例如下面的例子查找age大于20小于30的文档:
> db.test2.find(){ "_id" : ObjectId("573e72449e178b5475b29d89"), "name" : "brent", "age" : 28 }{ "_id" : ObjectId("573e73149e178b5475b29d8a"), "name" : "brent", "age" : 10 }{ "_id" : ObjectId("573e73ae9e178b5475b29d8b"), "name" : "bob", "age" : 14 }
> db.test2.find({"age":{"$gt":20,"$lt":30}}){ "_id" : ObjectId("573e72449e178b5475b29d89"), "name" : "brent", "age" : 28 }
对于文档的键&#20540;不等于某个特定的&#20540;,就要使用"$ne"了,他表示不相等.下面例子要查找name不等于brent的用户:
> db.test2.find({"name":{"$ne":"brent"}}){ "_id" : ObjectId("573e73ae9e178b5475b29d8b"), "name" : "bob", "age" : 14 }

OR查询

有两种方式进行OR查询:"$in"可以用来查询一个键的多个&#20540;,"$or"可以在多个键中查询任意给定的&#20540;. 例如下面要查询age为10,14的文档:
> db.test2.find({"age":{"$in":[10,14]}}){ "_id" : ObjectId("573e73149e178b5475b29d8a"), "name" : "brent", "age" : 10 }{ "_id" : ObjectId("573e73ae9e178b5475b29d8b"), "name" : "bob", "age" : 14 }
使用"$in"的时候,可以指定不同类型的条件和&#20540;,如果"$in"的数组只有一个&#20540;,那么和直接匹配是一样的."$in""nin"是相对的,"nin"返回数组中不匹配的文档.查询age不为10,14的文档:
> db.test2.find({"age":{"$nin":[10,14]}}){ "_id" : ObjectId("573e72449e178b5475b29d89"), "name" : "brent", "age" : 28 }
"$in"只能对单个键做OR查询,如果想对多个键做匹配OR查询那么可以使用"$or","$or"接受一个包含所有可能的数组作为条件. 例如下面这个查询name为bob或者age为10的文档:
> db.test2.find({"$or":[{"name":"bob"},{"age":10}]}){ "_id" : ObjectId("573e73149e178b5475b29d8a"), "name" : "brent", "age" : 10 }{ "_id" : ObjectId("573e73ae9e178b5475b29d8b"), "name" : "bob", "age" : 14 }
还可以将"$or"和"in"联合起来使用:
> db.test2.find({"$or":[{"age":{"$in":[10,28]}},{"name":"bob"}]}){ "_id" : ObjectId("573e72449e178b5475b29d89"), "name" : "brent", "age" : 28 }{ "_id" : ObjectId("573e73149e178b5475b29d8a"), "name" : "brent", "age" : 10 }{ "_id" : ObjectId("573e73ae9e178b5475b29d8b"), "name" : "bob", "age"
            var cpro_id = "u6885494";

        
        
    
推荐阅读
  • MongoDB集群配置:副本集与分片详解
    本文详细介绍了如何在MongoDB中配置副本集(Replica Sets)和分片(Sharding),并提供了具体的步骤和命令,帮助读者理解并实现高可用性和水平扩展的MongoDB集群。 ... [详细]
  • 解决MongoDB Compass远程连接问题
    本文记录了在使用阿里云服务器部署MongoDB后,通过MongoDB Compass进行远程连接时遇到的问题及解决方案。详细介绍了从防火墙配置到安全组设置的各个步骤,帮助读者顺利解决问题。 ... [详细]
  • Mongoose 5.12.10 发布:MongoDB 异步对象模型工具的新特性与修复
    Mongoose 是一款专为异步环境设计的 MongoDB 对象模型工具,支持 Promise 和回调函数。最新版本 Mongoose 5.12.10 带来了多项修复和改进,包括查询选项中的默认值设置、嵌入式判别器填充、以及 TypeScript 定义文件的优化。 ... [详细]
  • 本文探讨了2019年前端技术的发展趋势,包括工具化、配置化和泛前端化等方面,并提供了详细的学习路线和职业规划建议。 ... [详细]
  • 本文介绍了如何利用MongoDB的$exists操作符在Java应用程序中检查特定字段是否存在于文档中,包括示例代码和解释。 ... [详细]
  • 字节跳动夏季招聘面试经验分享
    本文详细记录了字节跳动夏季招聘的面试经历,涵盖了一、二、三轮面试的技术问题及项目讨论,旨在为准备类似面试的求职者提供参考。 ... [详细]
  • 本文将介绍如何利用Python爬虫技术抓取国内主流在线学习平台的数据,并以51CTO学院为例,进行详细的技术解析和实践操作。 ... [详细]
  • Spring Cloud因其强大的功能和灵活性,被誉为开发分布式系统的‘一站式’解决方案。它不仅简化了分布式系统中的常见模式实现,还被广泛应用于企业级生产环境中。本书内容详实,覆盖了从微服务基础到Spring Cloud的高级应用,适合各层次的开发者。 ... [详细]
  • 利用 Jest 和 Supertest 实现接口测试的全面指南
    本文深入探讨了如何使用 Jest 和 Supertest 进行接口测试,通过实际案例详细解析了测试环境的搭建、测试用例的编写以及异步测试的处理方法。 ... [详细]
  • 58同城的Elasticsearch应用与平台构建实践
    本文由58同城高级架构师于伯伟分享,由陈树昌编辑整理,内容源自DataFunTalk。文章探讨了Elasticsearch作为分布式搜索和分析引擎的应用,特别是在58同城的实施案例,包括集群优化、典型应用实例及自动化平台建设等方面。 ... [详细]
  • 本文详细介绍了如何在MongoDB中创建全文索引及其使用方法。全文索引允许用户通过部分匹配的方式快速搜索文档中的文本内容,但需注意的是,每个集合仅能创建一个全文索引。 ... [详细]
  • 多键索引(MultiKey Indexes)是在包含数组类型字段上创建的特殊索引,旨在优化对数组元素的查询性能。本文将通过实例介绍如何在MongoDB中创建和使用多键索引。 ... [详细]
  • ODBC介绍:开放式数据库连接详解
    本文详细介绍了ODBC(开放式数据库连接),这是一种允许应用程序访问多种数据库系统的标准API。自1992年由微软与Simba合作推出以来,ODBC已成为跨平台数据访问的重要标准。 ... [详细]
  • 利用GitHub热门资源,成功斩获阿里、京东、腾讯三巨头Offer
    Spring框架作为Java生态系统中的重要组成部分,因其强大的功能和灵活的扩展性,被广泛应用于各种规模的企业级应用开发中。本文将通过一份在GitHub上获得极高评价的Spring全家桶文档,探讨如何掌握Spring框架及其相关技术,助力职业发展。 ... [详细]
  • 本文探讨了在 Spring Boot 应用程序中使用 MongoDB 进行复杂文档查询的方法,特别是如何通过实体类映射来处理包含嵌套对象和列表的数据结构。 ... [详细]
author-avatar
男人--沉默底线
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有