您好,登錄后才能下訂單哦!
這篇“MongoDB中find操作符怎么使用”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“MongoDB中find操作符怎么使用”文章吧。
在我們繼續執行查找操作之前,我們首先需要設置一個數據庫baeldung和一個樣本收集員工:
db.employee.insertMany([ { "employeeId":"EMP1", "name":"Sam", "age":23, "type":"Full Time", "department":"Engineering" }, { "employeeId":"EMP2", "name":"Tony", "age":31, "type":"Full Time", "department":"Admin" }, { "employeeId":"EMP3", "name":"Lisa", "age":42, "type":"Part Time", "department":"Engineering" }]);
成功插入后,上述查詢將返回類似于下圖所示的 JSON 結果:
{ "acknowledged" : true, "insertedIds" : [ ObjectId("62a88223ff0a77909323a7fa"), ObjectId("62a88223ff0a77909323a7fb"), ObjectId("62a88223ff0a77909323a7fc") ] }
此時,我們已將一些文檔插入到我們的集合中以執行各種類型的查找操作。
要從 MongoDB 集合中查詢文檔,我們使用 db.collection.find(query, projection)
方法。該方法接受兩個可選參數— 查詢(query) 和 投影(projection) —作為 MongoDB BSON文檔。
查詢參數接受帶有查詢運算符的選擇過濾器。要從 MongoDB 集合中檢索所有文檔,我們可以省略此參數或傳遞一個空白文檔。
接下來,投影參數用于指定要從匹配文檔返回的字段。要返回匹配文檔中的所有字段,我們可以省略此參數。
此外,讓我們從返回所有集合文檔的基本查找查詢開始:
db.employee.find({});
上面的查詢將返回員工集合中的所有文檔:
{ "_id" : ObjectId("62a88223ff0a77909323a7fa"), "employeeId" : "1", "name" : "Sam", "age" : 23, "type" : "Full Time", "department" : "Engineering" }{ "_id" : ObjectId("62a88223ff0a77909323a7fb"), "employeeId" : "2", "name" : "Tony", "age" : 31, "type" : "Full Time", "department" : "Admin" }{ "_id" : ObjectId("62a88223ff0a77909323a7fc"), "employeeId" : "3", "name" : "Ray", "age" : 42, "type" : "Part Time", "department" : "Engineering" }
*接下來,讓我們編寫一個查詢來返回屬于“Engineering” *部門的所有員工:
db.employee.find({ "department":"Engineering"});
上述查詢返回部門等于 “Engineering”的所有員工收款單據:
{ "_id" : ObjectId("62a88223ff0a77909323a7fa"), "employeeId" : "1", "name" : "Sam", "age" : 23, "type" : "Full Time", "department" : "Engineering" }{ "_id" : ObjectId("62a88223ff0a77909323a7fc"), "employeeId" : "3", "name" : "Ray", "age" : 42, "type" : "Part Time", "department" : "Engineering" }
最后,讓我們編寫一個查詢來獲取屬于“Engineering”部門的所有員工的 姓名 和 年齡:
db.employee.find({ "department":"Engineering"},{ "name":1, "age":1});
上述查詢只返回符合查詢條件的文檔的名稱和年齡字段:
{ "_id" : ObjectId("62a88223ff0a77909323a7fa"), "name" : "Sam", "age" : 23 }{ "_id" : ObjectId("62a88223ff0a77909323a7fc"), "name" : "Ray", "age" : 42 }
請注意,除非明確排除,否則所有文檔中默認返回_id
字段。
此外,重要的是要注意 find 運算符將光標返回到與查詢過濾器匹配的文檔。MongoDB Shell 自動迭代光標以顯示多達 20 個文檔。
此外,MongoDB Shell 提供了一個*findOne()*方法,該方法只返回一個滿足上述查詢條件的文檔。如果多個文檔匹配,則將按照磁盤上文檔的自然順序返回第一個文檔:
db.employee.findOne();
與*find()*不同,上面的查詢將只返回一個文檔而不是游標:
{ "_id" : ObjectId("62a99e22a849e1472c440bbf"), "employeeId" : "EMP1", "name" : "Sam", "age" : 23, "type" : "Full Time", "department" : "Engineering"}
4. 使用 Java 驅動程序
到目前為止,我們已經了解了如何使用 MongoDB Shell 來執行查找操作。接下來,讓我們使用 MongoDB Java 驅動程序實現相同的功能。在開始之前,讓我們先創建一個到員工集合的MongoClient連接:
MongoClient mongoClient = new MongoClient("localhost", 27017);MongoDatabase database = mongoClient.getDatabase("baeldung");MongoCollection<Document> collection = database.getCollection("employee");
在這里,我們創建了到運行在默認端口 27017 上的 MongoDB 服務器的連接。接下來,我們從連接創建的*MongoDatabase實例中獲取MongoCollection的實例。
首先,要執行*查找操作,我們在MongoCollection的實例上調用 find()
方法。讓我們檢查代碼以從集合中檢索所有文檔:
FindIterable<Document> documents = collection.find();MongoCursor<Document> cursor = documents.iterator();while (cursor.hasNext()) { System.out.println(cursor.next());}
請注意,find()方法返回FindIterable<Document>
的一個實例。然后我們通過調用 FindIterable 的iterator()方法獲得MongoCursor的一個實例。最后,我們遍歷光標以檢索每個文檔。
接下來,讓我們添加查詢運算符來過濾從查找操作返回的文檔:
Bson filter = Filters.eq("department", "Engineering");FindIterable<Document> documents = collection.find(filter);MongoCursor<Document> cursor = documents.iterator();while (cursor.hasNext()) { System.out.println(cursor.next());}
在這里,我們將Bson過濾器作為參數傳遞給find()方法。我們可以使用查詢運算符的任意組合作為find()方法的過濾器。上面的代碼片段將返回department 等于“Engineering”的所有文檔。
此外,讓我們編寫一個片段,它只返回匹配選擇條件的文檔中的姓名和年齡字段:
Bson filter = Filters.eq("department", "Engineering");Bson projection = Projections.fields(Projections.include("name", "age"));FindIterable<Document> documents = collection.find(filter) .projection(projection);MongoCursor<Document> cursor = documents.iterator();while (cursor.hasNext()) { System.out.println(cursor.next());}
在這里,我們調用FindIterable實例的projection()方法。我們將Bson過濾器作為參數傳遞給*projection()*方法。我們可以使用投影操作在最終結果中包含或排除任何字段。
最后,我們可以使用FindIterable實例上的first()方法檢索結果的第一個文檔。這將返回單個文檔而不是MongoCursor實例:
FindIterable<Document> documents = collection.find();Document document = documents.first();
以上就是關于“MongoDB中find操作符怎么使用”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。