MongoDB Shell基本操作(二)
阿新 • • 發佈:2019-02-01
1、插入測試資料
> use mydb switched to db mydb > user1 = {FName:"Test",LName:"User",Age:30,Gender:"M",Country:"US"} { "FName" : "Test", "LName" : "User", "Age" : 30, "Gender" : "M", "Country" : "US" } > user2 = {Name:"Test USer",Age:45,Gender:"F",Country:"US"} { "Name" : "Test USer", "Age" : 45, "Gender" : "F", "Country" : "US" } > db.users.insert(user1) WriteResult({ "nInserted" : 1 }) > db.users.insert(user2) WriteResult({ "nInserted" : 1 })
> for(var i = 1; i <= 20; i++) db.users.insert({"Name":"Test User"+i,"Age":10+i,"Gender":"F","Country":"India"})
WriteResult({ "nInserted" : 1 })
2、查詢文件
> db.users.find()
或
> db.users.find({})
查詢文件包含選擇器和投影器
2.1 選擇器 - 過濾文件
像SQL中的where條件或者一個用於過濾出結果的過濾器;
查詢所有女性:
> db.users.find({"Gender":"F"})
查詢來自印度的女性:
> db.users.find({"Gender":"F", $or:[{"Country":"India"}]})
查詢來自印度或美國的女性:
> db.users.find({"Gender":"F", $or:[{"Country":"India"},{"Country":"US"}]})
聚合函式:
> db.users.find({"Gender":"F", $or:[{"Country":"India"},{"Country":"US"}]}).count() 21 > db.users.find({"Gender":"F", $or:[{"Country":"India"}]}).count() 20 > db.users.find().count() 22
2.2 投影器
查詢並顯示所有女性員工的名字和年齡:
> db.users.find({"Gender":"F"}, {"Name":1, "Age":1, "_id":0})
{ "Name" : "Test USer", "Age" : 45 }
{ "Name" : "Test User1", "Age" : 11 }
{ "Name" : "Test User2", "Age" : 12 }
{ "Name" : "Test User3", "Age" : 13 }
{ "Name" : "Test User4", "Age" : 14 }
{ "Name" : "Test User5", "Age" : 15 }
{ "Name" : "Test User6", "Age" : 16 }
{ "Name" : "Test User7", "Age" : 17 }
{ "Name" : "Test User8", "Age" : 18 }
{ "Name" : "Test User9", "Age" : 19 }
{ "Name" : "Test User10", "Age" : 20 }
{ "Name" : "Test User11", "Age" : 21 }
{ "Name" : "Test User12", "Age" : 22 }
{ "Name" : "Test User13", "Age" : 23 }
{ "Name" : "Test User14", "Age" : 24 }
{ "Name" : "Test User15", "Age" : 25 }
{ "Name" : "Test User16", "Age" : 26 }
{ "Name" : "Test User17", "Age" : 27 }
{ "Name" : "Test User18", "Age" : 28 }
{ "Name" : "Test User19", "Age" : 29 }
Type "it" for more
3、排序 - sort()
1用於升序排列,而-1用於降序排列;
按照年齡升序:
> db.users.find({"Gender":"F"}, {"Name":1, "Age":1, "_id":0}).sort({"Age":1})
{ "Name" : "Test User1", "Age" : 11 }
{ "Name" : "Test User2", "Age" : 12 }
{ "Name" : "Test User3", "Age" : 13 }
{ "Name" : "Test User4", "Age" : 14 }
{ "Name" : "Test User5", "Age" : 15 }
{ "Name" : "Test User6", "Age" : 16 }
{ "Name" : "Test User7", "Age" : 17 }
{ "Name" : "Test User8", "Age" : 18 }
{ "Name" : "Test User9", "Age" : 19 }
{ "Name" : "Test User10", "Age" : 20 }
{ "Name" : "Test User11", "Age" : 21 }
{ "Name" : "Test User12", "Age" : 22 }
{ "Name" : "Test User13", "Age" : 23 }
{ "Name" : "Test User14", "Age" : 24 }
{ "Name" : "Test User15", "Age" : 25 }
{ "Name" : "Test User16", "Age" : 26 }
{ "Name" : "Test User17", "Age" : 27 }
{ "Name" : "Test User18", "Age" : 28 }
{ "Name" : "Test User19", "Age" : 29 }
{ "Name" : "Test User20", "Age" : 30 }
Type "it" for more
按照名字降序並且按照年齡升序:
> db.users.find({"Gender":"F"}, {"Name":1, "Age":1, "_id":0}).sort({"Name":-1, "Age":1})
{ "Name" : "Test User9", "Age" : 19 }
{ "Name" : "Test User8", "Age" : 18 }
{ "Name" : "Test User7", "Age" : 17 }
{ "Name" : "Test User6", "Age" : 16 }
{ "Name" : "Test User5", "Age" : 15 }
{ "Name" : "Test User4", "Age" : 14 }
{ "Name" : "Test User3", "Age" : 13 }
{ "Name" : "Test User20", "Age" : 30 }
{ "Name" : "Test User2", "Age" : 12 }
{ "Name" : "Test User19", "Age" : 29 }
{ "Name" : "Test User18", "Age" : 28 }
{ "Name" : "Test User17", "Age" : 27 }
{ "Name" : "Test User16", "Age" : 26 }
{ "Name" : "Test User15", "Age" : 25 }
{ "Name" : "Test User14", "Age" : 24 }
{ "Name" : "Test User13", "Age" : 23 }
{ "Name" : "Test User12", "Age" : 22 }
{ "Name" : "Test User11", "Age" : 21 }
{ "Name" : "Test User10", "Age" : 20 }
{ "Name" : "Test User1", "Age" : 11 }
Type "it" for more
4、限制返回結果數量 - limit()
> db.users.find({"Gender":"F", $or:[{"Country":"India"},{"Country":"US"}]}).limit(2)
{ "_id" : ObjectId("5afbe1a28dda484c0d9dae6a"), "Name" : "Test USer", "Age" : 45, "Gender" : "F", "Country" : "US" }
{ "_id" : ObjectId("5afbe1b08dda484c0d9dae6b"), "Name" : "Test User1", "Age" : 11, "Gender" : "F", "Country" : "India" }
5、跳過指定數量記錄 - skip()
> db.users.find({"Gender":"F", $or:[{"Country":"India"},{"Country":"US"}]}).limit(2).skip(2)
{ "_id" : ObjectId("5afbe1b08dda484c0d9dae6c"), "Name" : "Test User2", "Age" : 12, "Gender" : "F", "Country" : "India" }
{ "_id" : ObjectId("5afbe1b08dda484c0d9dae6d"), "Name" : "Test User3", "Age" : 13, "Gender" : "F", "Country" : "India" }
6、返回符合條件的第一個文件 - findOne()
find()返回一個遊標,而findOne()返回單個文件;
> db.users.findOne({"Gender":"F"}, {"Name":1, "Age":1})
{
"_id" : ObjectId("5afbe1a28dda484c0d9dae6a"),
"Name" : "Test USer",
"Age" : 45
}
> db.users.findOne()
{
"_id" : ObjectId("5afbe19f8dda484c0d9dae69"),
"FName" : "Test",
"LName" : "User",
"Age" : 30,
"Gender" : "M",
"Country" : "US"
}
7、使用遊標
7.1 使用while迴圈操作儲存遊標物件的變數
> var c = db.users.find({"Country":"US"})
> while(c.hasNext()) printjson(c.next())
{
"_id" : ObjectId("5afbe19f8dda484c0d9dae69"),
"FName" : "Test",
"LName" : "User",
"Age" : 30,
"Gender" : "M",
"Country" : "US"
}
{
"_id" : ObjectId("5afbe1a28dda484c0d9dae6a"),
"Name" : "Test USer",
"Age" : 45,
"Gender" : "F",
"Country" : "US"
}
7.2 把儲存遊標物件的變數作為陣列來操作
> var c = db.users.find({"Country":"US"})
> printjson(c[1])
{
"_id" : ObjectId("5afbe1a28dda484c0d9dae6a"),
"Name" : "Test USer",
"Age" : 45,
"Gender" : "F",
"Country" : "US"
}
> c[0]
{
"_id" : ObjectId("5afbe19f8dda484c0d9dae69"),
"FName" : "Test",
"LName" : "User",
"Age" : 30,
"Gender" : "M",
"Country" : "US"
}
8、 explain()
從版本3.0開始,使用了一個可選的被稱為verbose的引數,詳細級別的模式:allPlansExecution、executionStats以及queryPlanner,預設的詳細級別模式是queryPlanner;
> db.users.find({"Name":"Test User"}).explain("allPlansExecution")
{
"queryPlanner" : {
"plannerVersion" : 1,
"namespace" : "mydb.users",
"indexFilterSet" : false,
"parsedQuery" : {
"Name" : {
"$eq" : "Test User"
}
},
"winningPlan" : {
"stage" : "COLLSCAN",
"filter" : {
"Name" : {
"$eq" : "Test User"
}
},
"direction" : "forward"
},
"rejectedPlans" : [ ]
},
"executionStats" : {
"executionSuccess" : true,
"nReturned" : 0,
"executionTimeMillis" : 0,
"totalKeysExamined" : 0,
"totalDocsExamined" : 22,
"executionStages" : {
"stage" : "COLLSCAN",
"filter" : {
"Name" : {
"$eq" : "Test User"
}
},
"nReturned" : 0,
"executionTimeMillisEstimate" : 0,
"works" : 24,
"advanced" : 0,
"needTime" : 23,
"needYield" : 0,
"saveState" : 0,
"restoreState" : 0,
"isEOF" : 1,
"invalidates" : 0,
"direction" : "forward",
"docsExamined" : 22
},
"allPlansExecution" : [ ]
},
"serverInfo" : {
"host" : "localhost.localdomain",
"port" : 27017,
"version" : "3.4.10",
"gitVersion" : "078f28920cb24de0dd479b5ea6c66c644f6326e9"
},
"ok" : 1
}