0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

MongoDB中如何检查一个字段是否存在

科技绿洲 来源:Java技术指北 作者:Java技术指北 2023-10-07 16:47 次阅读

在本文中,我们来聊聊如何在 MongoDB 中检查一个字段是否存在。

首先,我们需要创建一个简单的Mongo数据库, 然后放入一些假数据,以便在例子中使用。之后,我们将实战一下如何在 Mongo 客户端中进行查询以及在 Java 代码中检查字段是否存在。

示例配置

首先,让我们把Mongo shell上下文切换到一个存在的数据库。

use javanorth

我们将在users集合中插入一个用户。

db.users.insert({name: "java", surname: "north" })

现在我们已经做好了准备工作,接下去就讲讲如何检查字段是否存在。

在Mongo Shell中检查字段是否存在

我们能够通过基本的查询来检查特定字段的存在与否,例如在Mongo Shell或其他数据库控制台。Mongo提供了一个特殊的查询操作符,$exists方便我们查询验证。

db.users.find({ 'name' : { '$exists' : true }})

我们先使用一个标准的find 方法,在这个方法中,我们指定我们要查询的字段,并使用$exists查询操作符。如果name字段在users集合中存在,所有包含该字段的记录都将会被返回。

[
  {
    "_id": {"$oid": "6115ad91c4999031f8e6f582"},
    "name": "java",
    "surname": "north"
  }
]

如果该字段不存在,我们将得到一个空的结果。

在Java中检查字段的存在性

我们先添加Mongo driver 这个Maven的依赖包

< dependency >
    < groupId >org.mongodb< /groupId >
    < artifactId >mongo-java-driver< /artifactId >
    < version >3.12.10< /version >
< /dependency >

​然后通过代码构建一个连接到数据库

MongoClient mongoClient = new MongoClient();
MongoDatabase db = mongoClient.getDatabase("javanorth");
MongoCollection< Document > collection = db.getCollection("users");

使用过滤器

com.mongodb.client.model.Filters是Mongo依赖的一个工具类,包含了很多有用的方法。我们就只需要使用exists()方法。

Document nameDoc = collection.find(Filters.exists("name")).first();
assertNotNull(nameDoc);
assertFalse(nameDoc.isEmpty());

首先,我们尝试从users集合中寻找元素,并得到第一个找到的元素。如果指定的字段存在,我们得到一个nameDoc文档作为响应。

现在,让我们来看看当我们试图找到一个不存在的字段时会发生什么。

Document nameDoc = collection.find(Filters.exists("non_existing")).first();
assertNull(nameDoc);

如果没有找到元素,我们会得到一个 null 的Document作为响应。

使用 Document 查询

com.mongodb.client.model.Filters类并不是检查字段存在的唯一方法。我们也可以使用com.mongodb.BasicDBObject:的来查询验证。

Document query = new Document("name", new BasicDBObject("$exists", true));
Document doc = collection.find(query).first();
assertNotNull(doc);
assertFalse(doc.isEmpty());

结果与前面的例子相同。如果元素被找到了,我们会收到一个非nullDocument

当我们试图找一个不存在的字段时,代码的结果也是一样的。

Document query = new Document("non_existing", new BasicDBObject("$exists", true));
Document doc = collection.find(query).first();
assertNull(doc);

如果没有找到任何元素,我们会得到一个null 的 Document 作为响应。

总结

在这篇文章中,我们讨论了如何在MongoDB中检查字段是否存在。我们使用可以使用一个基本的查询来检查一个字段是否存在。也采用了com.mongodb.client.model.FiltersDocument查询方法来检查字段的存在。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • JAVA
    +关注

    关注

    19

    文章

    2904

    浏览量

    102996
  • 数据库
    +关注

    关注

    7

    文章

    3591

    浏览量

    63373
  • 代码
    +关注

    关注

    30

    文章

    4556

    浏览量

    66784
  • Shell
    +关注

    关注

    1

    文章

    358

    浏览量

    22903
  • mongodb
    +关注

    关注

    0

    文章

    22

    浏览量

    332
收藏 人收藏

    评论

    相关推荐

    求助:数组怎么样存入数据库的一个字段呢?

    看到程序,它将visa采集到的数据通过波形显示,同时数据创建为数组,存入到数据库的一个字段?在数据库里看到,比如波形的字段下,内容是长二进制数据,,求大神指导,这是怎么做的呢?万分
    发表于 11-10 11:35

    怎样把二维数组存到ACCESS数据库的一个字段呢?

    怎样把二维数组存到数据库的一个字段,并方便从这个字段取出来?有没有做过的,麻烦出来指点下啊 小弟先谢谢了
    发表于 08-01 20:33

    MySQL和MongoDB的对比

    的文档不需要具有相同的字段,数据的非规范化是常见的。 MongoDB还设计了高可用性和可扩展性,并提供了即用型复制和自动分片功能。术语和概念 MySQL
    发表于 08-28 14:51

    labview已知4个字符串(每个字符串包含一个字符)如何随机排列?

    labview已知4个字符串(每个字符串包含一个字符)如何随机排列?求大神给程框图。
    发表于 01-22 15:43

    MongoDB 4.0 RC 版本强势登陆

    ,应用通常希望某个字段的数据拥有统的类型,以方便数据处理。MongoDB 4.0 引入了新的聚合操作符 $convert, 允许用户在 aggregation pipeline 里将文档的
    发表于 06-11 19:42

    I2C总线是如何实现读一个字节的?

    I2C总线是如何实现读一个字节的?例如mcu要从某器件一个字节 有如下段程序uchar readbyte(){ uchar i,k;
    发表于 04-22 06:35

    如何判断一个字符串开头?

    命令以“$Cmd,”开头,以“,”分隔,以“*”结尾。单片机回复以“$Message,”开头,以“,”分隔,以“*”结尾。如果错误这以“$Message,ERROR,”开头,以“,”分隔,以“*”结尾。我想问我如何判断一个字符串开头,判断一个字符没问题,但判断字符串就达不
    发表于 09-11 22:13

    如何设置UART并发送一个字节?

    我想配置UART并从RF0以100kbaud发送一个字节……我已经阅读了用户手册的部分,查看了uart.h包含文件并从中Google搜索了cr@p,我似乎不知道如何去做。有人知道我如何设置UART并发送一个字节吗?谢谢
    发表于 10-24 10:02

    串口通信是一个字一个字节的发送与接收怎么解决?

    ~ 4FH单元。串口通信是一个字一个字节的发送与接收那这怎么解决呢?我们单片机的晶振与我们设置的波特率有关了,采用时钟周期为11.0592Mhz的晶振时,误差为0;当我们采用12Mhz的晶振时,波特率越大误差越大, 这个时
    发表于 02-18 06:31

    1602与51写一个字母_源代码

    1602与51写一个字母_源代码,感兴趣的可以看看。
    发表于 07-19 16:55 2次下载

    如何编写C语言程序判断一个字是否是字母或数字

    怎样判断一个字是否一个字母? 字母表中的所有字母(包括计算机键盘上的所有键)都被赋予了一个值,这些字符及其相应的值一起组成了ASCII字符集,该字符集在北美、欧洲和许多讲英语的国家中得到了广泛的使用。
    发表于 01-23 14:50 10次下载
    如何编写C语言程序判断<b class='flag-5'>一个字</b>符<b class='flag-5'>是否</b>是字母或数字

    如何使用Python3检查文件是否存在

    检查文件是否存在的方法, 在Python3 文件操作中经常被用到, 因为,只有文件存在, 我们才可以对文件进行下一步处理, 那么,常用的检查
    发表于 10-26 17:08 14次下载
    如何使用Python3<b class='flag-5'>检查</b>文件<b class='flag-5'>是否</b><b class='flag-5'>存在</b>

    浅谈STM32串口通信(一)基本介绍和一个字节传输的实现

    文章目录0 传输引脚1 传输一个字节1.1 发送一个字节1.2 接收一个字节2 代码2.1 配置2.2 发送一个字节2.3 接收一个字节0
    发表于 12-24 18:51 14次下载
    浅谈STM32串口通信(一)基本介绍和<b class='flag-5'>一个字</b>节传输的实现

    如何利用Java判断一个字符串是否包含某个字

    如何利用Java通过不同的方法来判断一个字符串是否包含某个字符。 **2 ****方法** 1. .contains方法
    的头像 发表于 02-17 15:13 1113次阅读
    如何利用Java判断<b class='flag-5'>一个字</b>符串<b class='flag-5'>是否</b>包含某<b class='flag-5'>个字</b>符

    Python中检查字符串包含的方法

    Python 有多种处理字符串的方法。今天我们介绍如何检查一个字符串中是否包含另一个字符串。
    的头像 发表于 05-14 16:02 1.4w次阅读