0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

MongoDB中如何檢查一個字段是否存在

科技綠洲 ? 來源:Java技術(shù)指北 ? 作者:Java技術(shù)指北 ? 2023-10-07 16:47 ? 次閱讀

在本文中,我們來聊聊如何在 MongoDB 中檢查一個字段是否存在。

首先,我們需要創(chuàng)建一個簡單的Mongo數(shù)據(jù)庫, 然后放入一些假數(shù)據(jù),以便在例子中使用。之后,我們將實戰(zhàn)一下如何在 Mongo 客戶端中進行查詢以及在 Java 代碼中檢查字段是否存在。

示例配置

首先,讓我們把Mongo shell上下文切換到一個存在的數(shù)據(jù)庫。

use javanorth

我們將在users集合中插入一個用戶。

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

現(xiàn)在我們已經(jīng)做好了準備工作,接下去就講講如何檢查字段是否存在。

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

我們能夠通過基本的查詢來檢查特定字段的存在與否,例如在Mongo Shell或其他數(shù)據(jù)庫控制臺。Mongo提供了一個特殊的查詢操作符,$exists方便我們查詢驗證。

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

我們先使用一個標(biāo)準的find 方法,在這個方法中,我們指定我們要查詢的字段,并使用$exists查詢操作符。如果name字段在users集合中存在,所有包含該字段的記錄都將會被返回。

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

如果該字段不存在,我們將得到一個空的結(jié)果。

在Java中檢查字段的存在性

我們先添加Mongo driver 這個Maven的依賴包

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

?然后通過代碼構(gòu)建一個連接到數(shù)據(jù)庫

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文檔作為響應(yīng)。

現(xiàn)在,讓我們來看看當(dāng)我們試圖找到一個不存在的字段時會發(fā)生什么。

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

如果沒有找到元素,我們會得到一個 null 的Document作為響應(yīng)。

使用 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());

結(jié)果與前面的例子相同。如果元素被找到了,我們會收到一個非nullDocument

當(dāng)我們試圖找一個不存在的字段時,代碼的結(jié)果也是一樣的。

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

如果沒有找到任何元素,我們會得到一個null 的 Document 作為響應(yīng)。

總結(jié)

在這篇文章中,我們討論了如何在MongoDB中檢查字段是否存在。我們使用可以使用一個基本的查詢來檢查一個字段是否存在。也采用了com.mongodb.client.model.FiltersDocument查詢方法來檢查字段的存在。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • JAVA
    +關(guān)注

    關(guān)注

    19

    文章

    2946

    瀏覽量

    104372
  • 數(shù)據(jù)庫
    +關(guān)注

    關(guān)注

    7

    文章

    3738

    瀏覽量

    64173
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4697

    瀏覽量

    68086
  • Shell
    +關(guān)注

    關(guān)注

    1

    文章

    361

    瀏覽量

    23234
  • mongodb
    +關(guān)注

    關(guān)注

    0

    文章

    22

    瀏覽量

    357
收藏 人收藏

    評論

    相關(guān)推薦

    求助:數(shù)組怎么樣存入數(shù)據(jù)庫的一個字段呢?

    看到程序,它將visa采集到的數(shù)據(jù)通過波形顯示,同時數(shù)據(jù)創(chuàng)建為數(shù)組,存入到數(shù)據(jù)庫的一個字段?在數(shù)據(jù)庫里看到,比如波形的字段下,內(nèi)容是長二進制數(shù)據(jù),,求大神指導(dǎo),這是怎么做的呢?萬分
    發(fā)表于 11-10 11:35

    怎樣把二維數(shù)組存到ACCESS數(shù)據(jù)庫的一個字段呢?

    怎樣把二維數(shù)組存到數(shù)據(jù)庫的一個字段,并方便從這個字段取出來?有沒有做過的,麻煩出來指點下啊 小弟先謝謝了
    發(fā)表于 08-01 20:33

    寫入一個字節(jié)到24c02并讀出來驗證

    寫入一個字節(jié)到24c02并讀出來驗證 本課的程序已經(jīng)包含了上顆的內(nèi)容,增加了讀
    發(fā)表于 08-09 22:01 ?3125次閱讀
    寫入<b class='flag-5'>一個字</b>節(jié)到24c02并讀出來驗證

    一個字節(jié)到24c02(源程序)

    一個字節(jié)到24c02(源程序) 24c02是非揮發(fā)eeprom存儲器器件,采用的IIC總線技術(shù)。24c02在許多試驗中都有出現(xiàn)。
    發(fā)表于 08-11 19:17 ?2886次閱讀

    UART 發(fā)送數(shù)據(jù)丟失最后一個字節(jié)

    STM32 UART 發(fā)送數(shù)據(jù)丟失最后一個字節(jié)
    發(fā)表于 12-04 15:10 ?0次下載

    C語言教程之輸出一個字符的前驅(qū)字符

    C語言教程之輸出一個字符的前驅(qū)字符,很好的C語言資料,快來學(xué)習(xí)吧。
    發(fā)表于 04-22 17:45 ?0次下載

    1602與51寫一個字母_源代碼

    1602與51寫一個字母_源代碼,感興趣的可以看看。
    發(fā)表于 07-19 16:55 ?2次下載

    關(guān)于UART發(fā)送數(shù)據(jù)丟失最后一個字節(jié)問題的詳細解析-pdf

    STM32 UART_發(fā)送數(shù)據(jù)丟失最后一個字節(jié)
    發(fā)表于 04-10 11:23 ?3次下載

    如何編寫C語言程序判斷一個字是否是字母或數(shù)字

    怎樣判斷一個字是否一個字母? 字母表的所有字母(包括計算機鍵盤上的所有鍵)都被賦予了
    發(fā)表于 01-23 14:50 ?10次下載
    如何編寫C語言程序判斷<b class='flag-5'>一個字</b>符<b class='flag-5'>是否</b>是字母或數(shù)字

    MongoDB引入字段級數(shù)據(jù)庫加密安全功能

    MongoDB 引入了全新的安全功能:字段級數(shù)據(jù)庫加密。在有了靜態(tài)存儲加密和傳輸加密之后,為什么還要字段加密?
    的頭像 發(fā)表于 04-02 17:56 ?2796次閱讀
    <b class='flag-5'>MongoDB</b>引入<b class='flag-5'>字段</b>級數(shù)據(jù)庫加密安全功能

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

    檢查文件是否存在的方法, 在Python3 文件操作中經(jīng)常被用到, 因為,只有文件存在, 我們才可以對文件進行下步處理, 那么,常用的
    發(fā)表于 10-26 17:08 ?14次下載
    如何使用Python3<b class='flag-5'>檢查</b>文件<b class='flag-5'>是否</b><b class='flag-5'>存在</b>

    淺談STM32串口通信()基本介紹和一個字節(jié)傳輸?shù)膶崿F(xiàn)

    文章目錄0 傳輸引腳1 傳輸一個字節(jié)1.1 發(fā)送一個字節(jié)1.2 接收一個字節(jié)2 代碼2.1 配置2.2 發(fā)送一個字節(jié)2.3 接收一個字節(jié)0
    發(fā)表于 12-24 18:51 ?14次下載
    淺談STM32串口通信(<b class='flag-5'>一</b>)基本介紹和<b class='flag-5'>一個字</b>節(jié)傳輸?shù)膶崿F(xiàn)

    如何利用Java判斷一個字符串是否包含某個字

    如何利用Java通過不同的方法來判斷一個字符串是否包含某個字符。 **2 ****方法** 1. .contains方法
    的頭像 發(fā)表于 02-17 15:13 ?1411次閱讀
    如何利用Java判斷<b class='flag-5'>一個字</b>符串<b class='flag-5'>是否</b>包含某<b class='flag-5'>個字</b>符

    Python檢查字符串包含的方法

    Python 有多種處理字符串的方法。今天我們介紹如何檢查一個字符串是否包含另一個字符串。
    的頭像 發(fā)表于 05-14 16:02 ?1.6w次閱讀

    UART發(fā)送數(shù)據(jù)丟失最后一個字節(jié)

    電子發(fā)燒友網(wǎng)站提供《UART發(fā)送數(shù)據(jù)丟失最后一個字節(jié).pdf》資料免費下載
    發(fā)表于 08-01 17:57 ?1次下載
    UART發(fā)送數(shù)據(jù)丟失最后<b class='flag-5'>一個字</b>節(jié)