使用 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