淺談mongodb中query查詢
Mongodb最大的功能之一就是它支持動(dòng)態(tài)查詢,就跟傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(kù)查詢一樣,但是它的查詢來(lái)的更靈活。
一、 Query Expression Objects:查詢表達(dá)式對(duì)象
查詢表達(dá)式文檔也是一個(gè)BSON結(jié)構(gòu)的文檔,例如,我們可以用下面的查詢語(yǔ)句來(lái)查詢集合中的所有記錄:
db.users.find({})
這里,表達(dá)式對(duì)象是一個(gè)空文檔,在查詢的時(shí)候去去匹配所有的記錄。再看:
db.users.find({'last_name': 'Smith'})
這里,我們將會(huì)查詢出所有“l(fā)ast_name”屬性值為“Smith”的文檔記錄。
二、查詢選項(xiàng)
除了查詢表達(dá)式意外,Mongodb還支持一些額外的參數(shù)選項(xiàng)。例如,我們可能僅僅只想返回某些特定的字段值:
//返回除了age字段外的所有字段
> db.user.find({},{age:0});
//返回tags=tennis 除了comments的所有列
db.posts.find( { tags : 'tennis' }, { comments : 0 } );
//返回userid=16的name字段
> db.user.find({userid:16},{name:1});
{ "_id" : 16, "name" : "user16" }
//返回x=john的所有z字段
db.things.find( { x : "john" }, { z : 1 } );
注: _id字段始終都會(huì)被返回,哪怕沒(méi)有明確指定
三、查詢條件
1) <, <=, >, >=
// 大于: field > value
db.collection.find({ "field" : { $gt: value } } );
//小于:field < value
db.collection.find({ "field" : { $lt: value } } );
//大于等于: field >= value
db.collection.find({ "field" : { $gte: value } } );
//小于等于:field<=value
db.collection.find({ "field" : { $lte: value } } );
2) $all
$all操作類似$in操作,但是不同的是,$all操作要求數(shù)組里面的值全部被包含在返回的記錄里面,如:
> use test;
switched to db test
> db.things.insert({a:[1,2,3]});
> db.things.find();
{ "_id" : ObjectId("4de73360059e7f4bdf907cfe"), "a" : [ 1, 2, 3 ] }
> db.things.find({a:{$all:[2,3]}});
{ "_id" : ObjectId("4de73360059e7f4bdf907cfe"), "a" : [ 1, 2, 3 ] }
> db.things.find({a:{$all:[1,2,3]}});
{ "_id" : ObjectId("4de73360059e7f4bdf907cfe"), "a" : [ 1, 2, 3 ] }
> db.things.find({a:{$all:[1]}});
{ "_id" : ObjectId("4de73360059e7f4bdf907cfe"), "a" : [ 1, 2, 3 ] }
> db.things.find({a:{$all:[1,2,3,4]}});
3) $exists
$exists操作檢查一個(gè)字段是否存在,如:
> for(var i=0;i<1000;i++) db.user.save({_id:i,name:'user'+i,userid:i,age:20});
//包含userid
> db.user.find({userid:{$exists:true}}).limit(5);
{ "_id" : 0, "name" : "user0", "userid" : 0, "age" : 20 }
{ "_id" : 1, "name" : "user1", "userid" : 1, "age" : 20 }
{ "_id" : 2, "name" : "user2", "userid" : 2, "age" : 20 }
{ "_id" : 3, "name" : "user3", "userid" : 3, "age" : 20 }
{ "_id" : 4, "name" : "user4", "userid" : 4, "age" : 20 }
//不包含sex字段
> db.user.find({sex:{$exists:false}}).limit(5);
4) $mod
$mod操作可以讓我們簡(jiǎn)單的進(jìn)行取模操作,而不需要用到where子句,如:
//where子句
> db.user.find("this._id%10==1").limit(5);
{ "_id" : 1, "name" : "user1", "userid" : 1, "age" : 20 }
{ "_id" : 11, "name" : "user11", "userid" : 11, "age" : 20 }
{ "_id" : 21, "name" : "user21", "userid" : 21, "age" : 20 }
{ "_id" : 31, "name" : "user31", "userid" : 31, "age" : 20 }
{ "_id" : 41, "name" : "user41", "userid" : 41, "age" : 20 }
//$mod操作
> db.user.find({_id:{$mod:[10,1]}}).limit(5);
{ "_id" : 1, "name" : "user1", "userid" : 1, "age" : 20 }
{ "_id" : 11, "name" : "user11", "userid" : 11, "age" : 20 }
{ "_id" : 21, "name" : "user21", "userid" : 21, "age" : 20 }
{ "_id" : 31, "name" : "user31", "userid" : 31, "age" : 20 }
{ "_id" : 41, "name" : "user41", "userid" : 41, "age" : 20 }
5) $ne
$ne意思是not equal,不等于,不用多說(shuō),看例子:
> db.user.find().limit(5);
{ "_id" : 0, "name" : "user0", "userid" : 0, "age" : 20 }
{ "_id" : 1, "name" : "user1", "userid" : 1, "age" : 20 }
{ "_id" : 2, "name" : "user2", "userid" : 2, "age" : 20 }
{ "_id" : 3, "name" : "user3", "userid" : 3, "age" : 20 }
{ "_id" : 4, "name" : "user4", "userid" : 4, "age" : 20 }
> db.user.find({_id:{$ne:0}}).limit(5);
{ "_id" : 1, "name" : "user1", "userid" : 1, "age" : 20 }
{ "_id" : 2, "name" : "user2", "userid" : 2, "age" : 20 }
{ "_id" : 3, "name" : "user3", "userid" : 3, "age" : 20 }
{ "_id" : 4, "name" : "user4", "userid" : 4, "age" : 20 }
{ "_id" : 5, "name" : "user5", "userid" : 5, "age" : 20 }
6) $in
$in操作類似于傳統(tǒng)關(guān)系數(shù)據(jù)庫(kù)中的IN,看例子:
//數(shù)據(jù)庫(kù)中有所有數(shù)組對(duì)應(yīng)的記錄
> db.user.find({_id:{$in:[2,3,4,5,6]}}).limit(5);
{ "_id" : 2, "name" : "user2", "userid" : 2, "age" : 20 }
{ "_id" : 3, "name" : "user3", "userid" : 3, "age" : 20 }
{ "_id" : 4, "name" : "user4", "userid" : 4, "age" : 20 }
{ "_id" : 5, "name" : "user5", "userid" : 5, "age" : 20 }
{ "_id" : 6, "name" : "user6", "userid" : 6, "age" : 20 }
//因?yàn)閿?shù)據(jù)庫(kù)中沒(méi)有_id=1111的記錄
> db.user.find({_id:{$in:[2,3,4,5,1111]}}).limit(5);
{ "_id" : 2, "name" : "user2", "userid" : 2, "age" : 20 }
{ "_id" : 3, "name" : "user3", "userid" : 3, "age" : 20 }
{ "_id" : 4, "name" : "user4", "userid" : 4, "age" : 20 }
{ "_id" : 5, "name" : "user5", "userid" : 5, "age" : 20 }
7) $nin
$nin跟$in操作相反,看例子:
//扣掉_id=1/2/3/4的記錄
> db.user.find({_id:{$nin:[1,2,3,4]}}).limit(5);
{ "_id" : 0, "name" : "user0", "userid" : 0, "age" : 20 }
{ "_id" : 5, "name" : "user5", "userid" : 5, "age" : 20 }
{ "_id" : 6, "name" : "user6", "userid" : 6, "age" : 20 }
{ "_id" : 7, "name" : "user7", "userid" : 7, "age" : 20 }
{ "_id" : 8, "name" : "user8", "userid" : 8, "age" : 20 }
8) $nor、$or
$nor跟$or相反,不好解釋,看例子:
> db.user.find({$nor:[{_id:2},{name:'user3'},{userid:4}]}).limit(5);
{ "_id" : 0, "name" : "user0", "userid" : 0, "age" : 20 }
{ "_id" : 1, "name" : "user1", "userid" : 1, "age" : 20 }
{ "_id" : 5, "name" : "user5", "userid" : 5, "age" : 20 }
{ "_id" : 6, "name" : "user6", "userid" : 6, "age" : 20 }
{ "_id" : 7, "name" : "user7", "userid" : 7, "age" : 20 }
> db.user.find({$or:[{_id:2},{name:'user3'},{userid:4}]}).limit(5);
{ "_id" : 2, "name" : "user2", "userid" : 2, "age" : 20 }
{ "_id" : 3, "name" : "user3", "userid" : 3, "age" : 20 }
{ "_id" : 4, "name" : "user4", "userid" : 4, "age" : 20 }
以上所述就是本文的全部?jī)?nèi)容了,希望大家能夠喜歡。
相關(guān)文章
MongoDB數(shù)據(jù)備份遷移的全過(guò)程
這篇文章主要記錄了MongoDB數(shù)據(jù)備份遷移的全過(guò)程,文中通過(guò)圖文結(jié)合的方式介紹的非常詳細(xì),對(duì)大家了解學(xué)習(xí)MongoDB數(shù)據(jù)備份遷移有一定的幫助,需要的朋友可以參考下2024-06-06
深究從MongoDB的ObjectId中獲取時(shí)間信息
MongoDB默認(rèn)使用_id字段作為主鍵,類型為ObjectId。ObjectId的生成有一定的規(guī)則,詳情可以查看這篇文章MongoDB深究之ObjectId2017-03-03
MongoDB固定集合(capped collection)的知識(shí)小結(jié)
固定集合指的是事先創(chuàng)建,并且大小固定的集合。下面這篇文章主要給大家總結(jié)介紹了MongoDB固定集合(capped collection)的知識(shí),文中介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-10-10
MongoDB系列教程(三):Windows中下載和安裝MongoDB
這篇文章主要介紹了MongoDB系列教程(三):MongoDB下載和安裝,本文講解使用Windows環(huán)境安裝MongoDB,需要的朋友可以參考下2015-05-05
MongoDB開(kāi)源數(shù)據(jù)庫(kù)開(kāi)發(fā)工具dbKoda
這篇文章主要介紹了MongoDB開(kāi)源數(shù)據(jù)庫(kù)開(kāi)發(fā)工具dbKoda的相關(guān)資料,需要的朋友可以參考下2017-09-09
mongoDB4.2.8備份恢復(fù)與導(dǎo)出導(dǎo)入(推薦)
這篇文章主要介紹了mongoDB4.2.8備份恢復(fù)與導(dǎo)出導(dǎo)入的相關(guān)知識(shí),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-12-12
MongoDB如何正確中斷正在創(chuàng)建的索引詳解
這篇文章主要給大家介紹了關(guān)于MongoDB如何正確中斷正在創(chuàng)建的索引的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12
Mongodb中使用$each向數(shù)組字段插入多個(gè)元素的操作方法
$each操作符應(yīng)用在UPDATE操作中的$addToSet和$push操作符當(dāng)中,與$addToSet搭配使用時(shí),將數(shù)組中的多個(gè)值插入到數(shù)組字段當(dāng)中,本文給大家介紹了Mongodb中使用$each向數(shù)組字段插入多個(gè)元素的操作方法,需要的朋友可以參考下2024-06-06

