【Mongodb】數據的高級查詢

db.集合名稱.find()

db.集合名稱.findOne({})

db.集合名稱.find({})

db.集合名稱.find({}).pretty()

> db.test1.find({age:13})
{ "_id" : ObjectId("5f01dfadb17ac23a4b796ba5"), "name" : "zhang1", "addr" : "beijing", "age" : 13 }
{ "_id" : ObjectId("5f01dfb2b17ac23a4b796ba6"), "name" : "zhang2", "addr" : "beijing", "age" : 13 }
{ "_id" : ObjectId("5f01dfbfb17ac23a4b796ba7"), "name" : "zhang2", "addr" : "shanghai", "age" : 13 }
{ "_id" : ObjectId("5f01dfc5b17ac23a4b796ba8"), "name" : "zhang3", "addr" : "shanghai", "age" : 13 }
> db.test1.find()
{ "_id" : ObjectId("5f01d623b17ac23a4b796b9f"), "name" : "zhangsan" }
{ "_id" : 11111, "name" : "lisi" }
{ "_id" : 11110, "name" : "lisi", "age" : "13" }
{ "_id" : ObjectId("5f01ddb5b17ac23a4b796ba0"), "name" : "wanger", "age" : 12 }
{ "_id" : ObjectId("5f01dfa5b17ac23a4b796ba4"), "name" : "zhang1", "addr" : "beijing", "age" : 12 }
{ "_id" : ObjectId("5f01dfadb17ac23a4b796ba5"), "name" : "zhang1", "addr" : "beijing", "age" : 13 }
{ "_id" : ObjectId("5f01dfb2b17ac23a4b796ba6"), "name" : "zhang2", "addr" : "beijing", "age" : 13 }
{ "_id" : ObjectId("5f01dfbfb17ac23a4b796ba7"), "name" : "zhang2", "addr" : "shanghai", "age" : 13 }
{ "_id" : ObjectId("5f01dfc5b17ac23a4b796ba8"), "name" : "zhang3", "addr" : "shanghai", "age" : 13 }
> db.test1.find({"name":zhang2})
2020-07-05T22:13:47.779+0800 ReferenceError: zhang2 is not defined
> db.test1.find({"name":"zhang2"})
{ "_id" : ObjectId("5f01dfb2b17ac23a4b796ba6"), "name" : "zhang2", "addr" : "beijing", "age" : 13 }
{ "_id" : ObjectId("5f01dfbfb17ac23a4b796ba7"), "name" : "zhang2", "addr" : "shanghai", "age" : 13 }
> db.test1.find({"name":"zhang2"}).pretty()
{
	"_id" : ObjectId("5f01dfb2b17ac23a4b796ba6"),
	"name" : "zhang2",
	"addr" : "beijing",
	"age" : 13
}
{
	"_id" : ObjectId("5f01dfbfb17ac23a4b796ba7"),
	"name" : "zhang2",
	"addr" : "shanghai",
	"age" : 13
}
> db.test1.findOne({"name":"zhang2"})
{
	"_id" : ObjectId("5f01dfb2b17ac23a4b796ba6"),
	"name" : "zhang2",
	"addr" : "beijing",
	"age" : 13
}

比較運算符

等於:默認是等於判斷,沒有運算符號

小於:$lt

小於等於:$lte

大於:$gt

大於等於:$gte

不等於:$ne

db.stru.find({age:{$gte:}})

 

範圍運算符

使用"$in","$nin" 判斷是否在某個範圍內

查詢年齡爲18,28的學生

db.stu.find({age:{$in:[18,28,38]}})

> db.test1.find({name:"zhang2",age:12}})
2020-07-05T22:26:11.858+0800 SyntaxError: Unexpected token }
> db.test1.find({name:"zhang2",age:13}})
2020-07-05T22:26:19.498+0800 SyntaxError: Unexpected token }
> db.test1.find({name:"zhang2",age:13})
{ "_id" : ObjectId("5f01dfb2b17ac23a4b796ba6"), "name" : "zhang2", "addr" : "beijing", "age" : 13 }
{ "_id" : ObjectId("5f01dfbfb17ac23a4b796ba7"), "name" : "zhang2", "addr" : "shanghai", "age" : 13 }
> db.test1.find({name:"zhang2",addr:{$in:["beijing"]}})
{ "_id" : ObjectId("5f01dfb2b17ac23a4b796ba6"), "name" : "zhang2", "addr" : "beijing", "age" : 13 }

邏輯運算符

and:在語句中寫多個條件即可

or:使用$or

查詢年齡大於18,或者性別爲false的學生

db.stu.find({$or:[{age:{$gt:18}},{gender:false}]})

查詢年齡大於18或性別爲男的學生,並且姓名是zhangsan

db.stu.find({$or:[{age:{$gt:18}},{gender:true}],name:"zhangsan"})

 

支持正則表達式

使用//或$regex編寫正則表達式

db.products.find({sku:/^abc/})  查詢字段sku 以abc結尾的

db.products.find({sku:{$regex:'789$'}})  查詢字段sku以789結尾的

> db.test2.find({sku:/^abc/})
{ "_id" : 100, "sku" : "abc123", "description" : "Single line description" }
{ "_id" : 101, "sku" : "abc789", "description" : "First line\nSecond line" }
{ "_id" : 104, "sku" : "abc123", "description" : "Single line description" }
> db.test2.find({sku:{$regex:'789$'}})
{ "_id" : 101, "sku" : "abc789", "description" : "First line\nSecond line" }
{ "_id" : 103, "sku" : "xyz789", "description" : "Multiple\nline description" }

limit與skip

方法limit()  用於讀取指定數量的數據

db.集合名稱.find().limit(number)

方法skip()用於跳過指定數量的數據

db.集合名稱.find().skip(number)

> db.test2.find().limit(2)
{ "_id" : 100, "sku" : "abc123", "description" : "Single line description" }
{ "_id" : 101, "sku" : "abc789", "description" : "First line\nSecond line" }
> db.test2.find().skip(2)
{ "_id" : 102, "sku" : "xyz456", "description" : "Many spaces before   line" }
{ "_id" : 103, "sku" : "xyz789", "description" : "Multiple\nline description" }
{ "_id" : 104, "sku" : "abc123", "description" : "Single line description" }

 

自定義查詢

使用$where後面寫一個函數,返回滿足條件的數據,查詢年齡大於30的學生

db.stu.find({$where:function(){

                    return this.age>30;

                 }})

> db.test1.find({$where:function(){return this.age=13}})
{ "_id" : ObjectId("5f01d623b17ac23a4b796b9f"), "name" : "zhangsan" }
{ "_id" : 11111, "name" : "lisi" }
{ "_id" : 11110, "name" : "lisi", "age" : "13" }
{ "_id" : ObjectId("5f01ddb5b17ac23a4b796ba0"), "name" : "wanger", "age" : 12 }
{ "_id" : ObjectId("5f01dfa5b17ac23a4b796ba4"), "name" : "zhang1", "addr" : "beijing", "age" : 12 }
{ "_id" : ObjectId("5f01dfadb17ac23a4b796ba5"), "name" : "zhang1", "addr" : "beijing", "age" : 13 }
{ "_id" : ObjectId("5f01dfb2b17ac23a4b796ba6"), "name" : "zhang2", "addr" : "beijing", "age" : 13 }
{ "_id" : ObjectId("5f01dfbfb17ac23a4b796ba7"), "name" : "zhang2", "addr" : "shanghai", "age" : 13 }
{ "_id" : ObjectId("5f01dfc5b17ac23a4b796ba8"), "name" : "zhang3", "addr" : "shanghai", "age" : 13 

投影操作
在返回結果中,只選擇需要顯示的字段
字符1表示顯示,0表示不顯示
特殊 對於_id 默認是顯示的,如果不顯示需要明確設置爲0
> db.test1.find({$where:function(){return this.age=13}},{name:1})
{ "_id" : ObjectId("5f01d623b17ac23a4b796b9f"), "name" : "zhangsan" }
{ "_id" : 11111, "name" : "lisi" }
{ "_id" : 11110, "name" : "lisi" }
{ "_id" : ObjectId("5f01ddb5b17ac23a4b796ba0"), "name" : "wanger" }
{ "_id" : ObjectId("5f01dfa5b17ac23a4b796ba4"), "name" : "zhang1" }
{ "_id" : ObjectId("5f01dfadb17ac23a4b796ba5"), "name" : "zhang1" }
{ "_id" : ObjectId("5f01dfb2b17ac23a4b796ba6"), "name" : "zhang2" }
{ "_id" : ObjectId("5f01dfbfb17ac23a4b796ba7"), "name" : "zhang2" }
{ "_id" : ObjectId("5f01dfc5b17ac23a4b796ba8"), "name" : "zhang3" }

 

排序操作

升序

db.stu.find().sort({age:1})

db.stu.find().sort({age:1,gender:-1})

降序

db.stu.find().sort({age:-1})

 

 

統計數目 .count()

消除重複

db.stu.distinct(‘hometown’,{age:{$gt:18}})

> db.test1.distinct("age")
[ "13", 12, 13 ]
> db.test1.count()
9

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章