[譯]2.MongoDB之Selector

原文地址
除了上面我們提到的6個(gè)概念肌厨,在開始一些高級(jí)topic之前培慌,你應(yīng)該好好理解查詢選擇器。比如你可以在find柑爸,count吵护,update,remove 文檔的時(shí)候使用表鳍。一個(gè)選擇器(selector)本質(zhì)上是一個(gè)JSON對(duì)象馅而,最簡(jiǎn)單的選擇器就是{},這將匹配所有的文檔譬圣。如果想找到所有雌性u(píng)nicorns瓮恭,我們可以使用{gendar:’f’}。
在深入挖掘(delving)選擇器之前厘熟,我們先插入一些數(shù)據(jù)屯蹦。首先,通過(guò) db.unicorns.remove() 移除原有的數(shù)據(jù)绳姨,然后完成插入工作登澜。

db.unicorns.insert({name: 'Horny',
dob: new Date(1992,2,13,7,47),
loves: ['carrot','papaya'],
weight: 600,
gender: 'm',
vampires: 63});
db.unicorns.insert({name: 'Aurora',
dob: new Date(1991, 0, 24, 13, 0),
loves: ['carrot', 'grape'],
weight: 450,
gender: 'f',
vampires: 43});
db.unicorns.insert({name: 'Unicrom',
dob: new Date(1973, 1, 9, 22, 10),
loves: ['energon', 'redbull'],
weight: 984,
gender: 'm',
vampires: 182});
db.unicorns.insert({name: 'Roooooodles',
dob: new Date(1979, 7, 18, 18, 44),
loves: ['apple'],
weight: 575,
gender: 'm',
vampires: 99});
db.unicorns.insert({name: 'Solnara',
dob: new Date(1985, 6, 4, 2, 1),
loves:['apple', 'carrot',
'chocolate'],
weight:550,
gender:'f',
vampires:80});
db.unicorns.insert({name:'Ayna', 
dob: new Date(1998, 2, 7, 8, 30),
loves: ['strawberry', 'lemon'],
weight: 733,
gender: 'f',
vampires: 40});
db.unicorns.insert({name:'Kenny',
dob: new Date(1997, 6, 1, 10, 42),
loves: ['grape', 'lemon'],
weight: 690,
gender: 'm',
vampires: 39});
db.unicorns.insert({name: 'Raleigh',
dob: new Date(2005, 4, 3, 0, 57),
loves: ['apple', 'sugar'],
weight: 421,
gender: 'm',
vampires: 2});
db.unicorns.insert({name: 'Leia',
dob: new Date(2001, 9, 8, 14, 53),
loves: ['apple', 'watermelon'],
weight: 601,
gender: 'f',
vampires: 33});
db.unicorns.insert({name: 'Pilot',
dob: new Date(1997, 2, 1, 5, 3),
loves: ['apple', 'watermelon'],
weight: 650,
gender: 'm',
vampires: 54});
db.unicorns.insert({name: 'Nimue',
dob: new Date(1999, 11, 20, 16, 15),
loves: ['grape', 'carrot'],
weight: 540,
gender: 'f'});
db.unicorns.insert({name: 'Dunx',
dob: new Date(1976, 6, 18, 18, 18),
loves: ['grape', 'watermelon'],
weight: 704,
gender: 'm',
vampires: 165});

下面我們將通過(guò)這些數(shù)據(jù)逐步掌握selector。{field:value}可以用來(lái)查找field等于value的文檔飘庄;{field1:value1, field2:value2}是一個(gè)“與“聲明脑蠕。特殊的$lt,$lte,$gt,$gte,$ne被用來(lái)表示less than,less than or equal,greater than, greater than or equal,not equal等操作符。舉例來(lái)說(shuō)跪削,為了得到體重超過(guò)700磅的雌性u(píng)nicorns空郊,我們可以這樣做:

db.unicorns.find({gender: 'm',
weight: {$gt: 700}})
//or (not quite the same thing, but for
//demonstration purposes)
db.unicorns.find({gender: {$ne: 'f'},
weight: {$gte: 701}})

$exists操作符可以用來(lái)對(duì)某個(gè)field是否存在進(jìn)行匹配份招,比如:

db.unicorns.find({vampires:{$exists:false}})

結(jié)果將返回

{ "_id" : ObjectId("5936b69f52f16625c139dd91"), "name" : "Nimue", "dob" : ISODate("1999-12-20T08:15:00Z"), "loves" : [ "grape", "carrot" ], "weight" : 540, "gender" : "f" }

$in操作符用來(lái)匹配數(shù)組中包含某值的document。

db.unicorns.find({
loves: {$in:['apple','orange']}})

上面的語(yǔ)句將返回喜愛apple 和 orange 的unicorn狞甚。
如果我們想在不同field之間使用OR條件而不是AND條件锁摔,可以使用$or操作符,比如:

db.unicorns.find({gender: 'f',
$or: [{loves: 'apple'},
{weight: {$lt: 500}}]})

上面將返回所有喜歡spple或者體重小于500磅的unicorn哼审。
上面兩個(gè)例子谐腰,將顯得更加整潔(neat)。你可能已經(jīng)注意到了涩盾,loves 是一個(gè)數(shù)組十气。MongoDB支持?jǐn)?shù)組作為第一類對(duì)象。這是一個(gè)極其方便的特性(incredibly handy feature)春霍。一旦你使用了它砸西,將無(wú)法離開它。更加有意思的是址儒,基于數(shù)組的查詢非常簡(jiǎn)單:

{loves: 'watermelon'}

將返回所有l(wèi)oves中包含watermelon的document芹枷。
可用的操作符還有很多,可以在這里找到更多的描述Query Selectors莲趣。
我們已經(jīng)看到如何在find命令中使用selector鸳慈。這些selector同樣可以使用在remove命令,count命令喧伞,update命令等走芋。
MongoDB產(chǎn)生的ObjectId類型的field _id可以這樣使用:

db.unicorns.find(
{_id: ObjectId("TheObjectId")})
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市潘鲫,隨后出現(xiàn)的幾起案子翁逞,更是在濱河造成了極大的恐慌,老刑警劉巖溉仑,帶你破解...
    沈念sama閱讀 217,734評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件熄攘,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡彼念,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門浅萧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)逐沙,“玉大人,你說(shuō)我怎么就攤上這事洼畅》园福” “怎么了?”我有些...
    開封第一講書人閱讀 164,133評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵帝簇,是天一觀的道長(zhǎng)徘郭。 經(jīng)常有香客問(wèn)我靠益,道長(zhǎng),這世上最難降的妖魔是什么残揉? 我笑而不...
    開封第一講書人閱讀 58,532評(píng)論 1 293
  • 正文 為了忘掉前任胧后,我火速辦了婚禮,結(jié)果婚禮上抱环,老公的妹妹穿的比我還像新娘壳快。我一直安慰自己,他們只是感情好镇草,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,585評(píng)論 6 392
  • 文/花漫 我一把揭開白布眶痰。 她就那樣靜靜地躺著,像睡著了一般梯啤。 火紅的嫁衣襯著肌膚如雪竖伯。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,462評(píng)論 1 302
  • 那天因宇,我揣著相機(jī)與錄音七婴,去河邊找鬼。 笑死羽嫡,一個(gè)胖子當(dāng)著我的面吹牛本姥,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播杭棵,決...
    沈念sama閱讀 40,262評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼婚惫,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了魂爪?” 一聲冷哼從身側(cè)響起先舷,我...
    開封第一講書人閱讀 39,153評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎滓侍,沒(méi)想到半個(gè)月后蒋川,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,587評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡撩笆,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,792評(píng)論 3 336
  • 正文 我和宋清朗相戀三年捺球,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片夕冲。...
    茶點(diǎn)故事閱讀 39,919評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡氮兵,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出歹鱼,到底是詐尸還是另有隱情泣栈,我是刑警寧澤,帶...
    沈念sama閱讀 35,635評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站南片,受9級(jí)特大地震影響掺涛,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜疼进,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,237評(píng)論 3 329
  • 文/蒙蒙 一薪缆、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧颠悬,春花似錦矮燎、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至灾票,卻和暖如春峡谊,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背刊苍。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工既们, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人正什。 一個(gè)月前我還...
    沈念sama閱讀 48,048評(píng)論 3 370
  • 正文 我出身青樓啥纸,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親婴氮。 傳聞我的和親對(duì)象是個(gè)殘疾皇子斯棒,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,864評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容