1. 程式人生 > >MongoDB Shell基本操作(二)

MongoDB Shell基本操作(二)

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
}