在本文中,我們來聊聊如何在 MongoDB 中檢查一個(gè)字段是否存在。
首先,我們需要?jiǎng)?chuàng)建一個(gè)簡(jiǎn)單的Mongo數(shù)據(jù)庫, 然后放入一些假數(shù)據(jù),以便在例子中使用。之后,我們將實(shí)戰(zhàn)一下如何在 Mongo 客戶端中進(jìn)行查詢以及在 Java 代碼中檢查字段是否存在。
示例配置
首先,讓我們把Mongo shell上下文切換到一個(gè)存在的數(shù)據(jù)庫。
use javanorth
我們將在users
集合中插入一個(gè)用戶。
db.users.insert({name: "java", surname: "north" })
現(xiàn)在我們已經(jīng)做好了準(zhǔn)備工作,接下去就講講如何檢查字段是否存在。
在Mongo Shell中檢查字段是否存在
我們能夠通過基本的查詢來檢查特定字段的存在與否,例如在Mongo Shell或其他數(shù)據(jù)庫控制臺(tái)。Mongo提供了一個(gè)特殊的查詢操作符,$exists
方便我們查詢驗(yàn)證。
db.users.find({ 'name' : { '$exists' : true }})
我們先使用一個(gè)標(biāo)準(zhǔn)的find
方法,在這個(gè)方法中,我們指定我們要查詢的字段,并使用$exists
查詢操作符。如果name
字段在users
集合中存在,所有包含該字段的記錄都將會(huì)被返回。
[
{
"_id": {"$oid": "6115ad91c4999031f8e6f582"},
"name": "java",
"surname": "north"
}
]
如果該字段不存在,我們將得到一個(gè)空的結(jié)果。
在Java中檢查字段的存在性
我們先添加Mongo driver 這個(gè)Maven的依賴包
< dependency >
< groupId >org.mongodb< /groupId >
< artifactId >mongo-java-driver< /artifactId >
< version >3.12.10< /version >
< /dependency >
?然后通過代碼構(gòu)建一個(gè)連接到數(shù)據(jù)庫
MongoClient mongoClient = new MongoClient();
MongoDatabase db = mongoClient.getDatabase("javanorth");
MongoCollection< Document > collection = db.getCollection("users");
使用過濾器
com.mongodb.client.model.Filters
是Mongo依賴的一個(gè)工具類,包含了很多有用的方法。我們就只需要使用exists()
方法。
Document nameDoc = collection.find(Filters.exists("name")).first();
assertNotNull(nameDoc);
assertFalse(nameDoc.isEmpty());
首先,我們嘗試從users
集合中尋找元素,并得到第一個(gè)找到的元素。如果指定的字段存在,我們得到一個(gè)nameDoc
文檔作為響應(yīng)。
現(xiàn)在,讓我們來看看當(dāng)我們?cè)噲D找到一個(gè)不存在的字段時(shí)會(huì)發(fā)生什么。
Document nameDoc = collection.find(Filters.exists("non_existing")).first();
assertNull(nameDoc);
如果沒有找到元素,我們會(huì)得到一個(gè) null 的Document作為響應(yīng)。
使用 Document 查詢
com.mongodb.client.model.Filters
類并不是檢查字段存在的唯一方法。我們也可以使用com.mongodb.BasicDBObject:
的來查詢驗(yàn)證。
Document query = new Document("name", new BasicDBObject("$exists", true));
Document doc = collection.find(query).first();
assertNotNull(doc);
assertFalse(doc.isEmpty());
結(jié)果與前面的例子相同。如果元素被找到了,我們會(huì)收到一個(gè)非null
的Document
。
當(dāng)我們?cè)噲D找一個(gè)不存在的字段時(shí),代碼的結(jié)果也是一樣的。
Document query = new Document("non_existing", new BasicDBObject("$exists", true));
Document doc = collection.find(query).first();
assertNull(doc);
如果沒有找到任何元素,我們會(huì)得到一個(gè)null 的 Document 作為響應(yīng)。
總結(jié)
在這篇文章中,我們討論了如何在MongoDB中檢查字段是否存在。我們使用可以使用一個(gè)基本的查詢來檢查一個(gè)字段是否存在。也采用了com.mongodb.client.model.Filters
和Document
查詢方法來檢查字段的存在。
-
JAVA
+關(guān)注
關(guān)注
20文章
2989瀏覽量
109971 -
數(shù)據(jù)庫
+關(guān)注
關(guān)注
7文章
3929瀏覽量
66298 -
代碼
+關(guān)注
關(guān)注
30文章
4900瀏覽量
70797 -
Shell
+關(guān)注
關(guān)注
1文章
372瀏覽量
24231 -
mongodb
+關(guān)注
關(guān)注
0文章
24瀏覽量
471
發(fā)布評(píng)論請(qǐng)先 登錄
當(dāng)從接收DMA一次接收一個(gè)字節(jié)時(shí),如何檢查是否已接收到任意長(zhǎng)度的所有數(shù)據(jù)包呢?
求助:數(shù)組怎么樣存入數(shù)據(jù)庫的一個(gè)字段呢?
怎樣把二維數(shù)組存到ACCESS數(shù)據(jù)庫的一個(gè)字段中呢?
寫入一個(gè)字節(jié)到24c02并讀出來驗(yàn)證

寫一個(gè)字節(jié)到24c02中(源程序)
UART 發(fā)送數(shù)據(jù)丟失最后一個(gè)字節(jié)
C語言教程之輸出一個(gè)字符的前驅(qū)字符
關(guān)于UART發(fā)送數(shù)據(jù)丟失最后一個(gè)字節(jié)問題的詳細(xì)解析-pdf
如何編寫C語言程序判斷一個(gè)字符是否是字母或數(shù)字

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

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

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

Python中檢查字符串包含的方法
UART發(fā)送數(shù)據(jù)丟失最后一個(gè)字節(jié)

評(píng)論