使用 MongoDB Shell 列印文件值

Mehvish Ashiq 2023年1月30日 2022年6月2日
  1. 使用 MongoDB Shell 列印文件值
  2. 列印集合中所有文件的文件值
  3. 僅列印第一個文件的文件值
  4. 列印具有自定義屬性名稱的所有文件的文件值
  5. 根據指定條件列印所有文件的文件值
使用 MongoDB Shell 列印文件值

列印文件的價值也是一項令人難以置信的技能,我們可以根據專案的需要從中受益。本教程使用 MongoDB shell 列印文件值而不是列印完整文件。

使用 MongoDB Shell 列印文件值

使用 Mongo shell 列印文件非常簡單,但是如何列印值和屬性而不是獲取整個文件呢?在深入研究細節之前,讓我們建立一個名為 teachers 的集合,其中包含如下給出的 JSON 文件。

建立集合:

> db.createCollection('teachers')

將 JSON 文件插入 teachers 集合中:

> db.teachers.insertMany(
  [
        {
            "first_name": "Mehvish",
            "last_name": "Ashiq",
            "gender": "Female",
            "grade": 18
        },
        {
            "first_name": "Tahir",
            "last_name": "Raza",
            "gender": "Male",
            "grade": 18
        },
        {
            "first_name": "Saira",
            "last_name": "Daniel",
            "gender": "Female",
            "grade": 20

        }
    ]

)

顯示 teachers 集合中的所有文件:

> db.teachers.find().pretty()

輸出:

{
        "_id" : ObjectId("6290440e7c524c650b7a51c0"),
        "first_name" : "Mehvish",
        "last_name" : "Ashiq",
        "gender" : "Female",
        "grade" : 18
}
{
        "_id" : ObjectId("6290440e7c524c650b7a51c1"),
        "first_name" : "Tahir",
        "last_name" : "Raza",
        "gender" : "Male",
        "grade" : 18
}
{
        "_id" : ObjectId("6290440e7c524c650b7a51c2"),
        "first_name" : "Saira",
        "last_name" : "Daniel",
        "gender" : "Female",
        "grade" : 20
}

一旦我們完成建立集合並用文件填充它,我們可以根據專案要求列印文件值。下面列出了一些場景:

  • 列印集合中所有文件的文件值
  • 僅列印第一個文件的文件值
  • 列印具有自定義屬性名稱的所有文件的文件值
  • 根據所有文件的指定條件列印文件值

列印集合中所有文件的文件值

示例程式碼:

> db.teachers.find().forEach(
    function (data) {
        Object.keys(data).forEach(
            function(key) {
                print(key + ': ' + data[key])
            }
        )
        print('\n')
    }
)

輸出:

_id: 6290440e7c524c650b7a51c0
first_name: Mehvish
last_name: Ashiq
gender: Female
grade: 18

_id: 6290440e7c524c650b7a51c1
first_name: Tahir
last_name: Raza
gender: Male
grade: 18

_id: 6290440e7c524c650b7a51c2
first_name: Saira
last_name: Daniel
gender: Female
grade: 20

此示例程式碼使用 find() 方法獲取所有 JSON 文件。然後,我們使用 JavaScript 的 forEach() 迴圈遍歷每個文件,並將每個文件作為 data 傳遞給匿名函式。

在此函式中,我們使用 Object.keys(data) 檢索 data 變數包含的特定文件的所有鍵(也稱為屬性或欄位名稱)。

此外,另一個 forEach() 方法用於迭代文件的鍵(儲存在 data 變數中)並呼叫另一個匿名函式以列印具有相應值的所有鍵。

僅列印第一個文件的文件值

示例程式碼:

> let result = db.getCollection('teachers').findOne()
> for (var key in result) {
    if (result.hasOwnProperty(key)) {
        print(key + ': ' + result[key]);
    }
}

輸出:

_id: 6290440e7c524c650b7a51c0
first_name: Mehvish
last_name: Ashiq
gender: Female
grade: 18

對於這個示例片段,我們使用 findOne() 方法僅從指定集合中檢索第一個文件並將其儲存到 result 物件中。

接下來,我們使用 JavaScript 的 for-in 迴圈遍歷 result 物件並返回一個 key 以訪問作為 result[key] 的值。

在訪問 key 的值之前,我們使用 hasOwnProperty() 方法檢查物件(在本例中為 result)是否具有給定屬性作為它自己的屬性。

列印具有自定義屬性名稱的所有文件的文件值

示例程式碼:

> db.teachers.find().forEach(
    function (document) {
        print("FirstName: " + document.first_name +"\n"+
              "LastName: " + document.last_name + "\n"+
              "Grade: " + document.grade)
        print("\n\n")
    }
)

輸出:

FirstName: Mehvish
LastName: Ashiq
Grade: 18

FirstName: Tahir
LastName: Raza
Grade: 18

FirstName: Saira
LastName: Daniel
Grade: 20

有時,我們不想獲取程式中指定的屬性名稱,但我們想使用自定義屬性名稱。如果是這樣,此解決方案適合你。

我們使用 find() 方法獲取 teachers 集合中的所有文件。然後,遍歷每個文件以使用鍵(也稱為欄位或屬性名稱)檢索值。

你可能已經注意到,在本示例中,我們沒有獲取名為 _id 的主鍵及其值。這是因為我們沒有在 print() 語句中指定它,但它仍然存在於 document 變數中。

使用以下程式碼進行檢查。

示例程式碼:

db.teachers.find().forEach(
    function (document) {
        print(document._id)
        print("\n\n")
    }
)

輸出:

ObjectId("6290440e7c524c650b7a51c0")

ObjectId("6290440e7c524c650b7a51c1")

ObjectId("6290440e7c524c650b7a51c2")

讓我們看下一節以避免在 Mongo shell 上出現這種情況。

根據指定條件列印所有文件的文件值

示例程式碼:

> db.teachers.find({}, {"grade": 1, "_id":0}).forEach(
    function(property) {
        print(property.grade)
})

輸出:

18
18
20

在這裡,我們需要先了解 find() 函式來了解示例程式碼。我們可以通過不同的方式使用 find() 方法來滿足需求;下面列出了一些格式:

  • 使用 find()find({}) 從指定集合中獲取所有文件
  • 使用 find({}, {city: 1}) 檢索所有文件的 city 屬性及其值。
  • 使用 find({}, {city: 1, "_id:0"}) 獲取所有文件的 city 屬性及其值,但不顯示 ObjectId。在這裡,將 _id 的值設定為 0(預設為 1)不允許列印 ObjectId

同樣,我們使用 find() 方法來檢索 grade 屬性及其值,而不顯示 _id 欄位。

但是,我們對每條記錄使用 forEach() 迴圈,僅列印傳遞給匿名函式的屬性值。我們可以使用 JavaScript 的箭頭函式優化程式碼。

示例程式碼:

db.teachers.find({}, {"grade": 1, "_id":0}).forEach( property => print(property.grade))

輸出:

18
18
20
Mehvish Ashiq avatar Mehvish Ashiq avatar

Mehvish Ashiq is a former Java Programmer and a Data Science enthusiast who leverages her expertise to help others to learn and grow by creating interesting, useful, and reader-friendly content in Computer Programming, Data Science, and Technology.

LinkedIn GitHub Facebook

相關文章 - MongoDB Print