MongoDB使用find來查詢,不指定任何參數說明是對整個集合的文檔查詢。
find查詢
指定返回的鍵
有時并不需要將文檔中所有鍵值對都返回,可以通過find(或者findOne)的第二個參數來制定想要的鍵,這樣即會節省傳輸的數據量,又能節省客戶端解碼文檔的時間和內存消耗。
例如:
> db.people.find()
{ "_id" : ObjectId("54d08a1d0eb7b5f5718da828"), "name" : "joe", "friends" : 32,
"enemies" : 2 }
{ "_id" : ObjectId("54d08f7f0eb7b5f5718da82a"), "name" : "joe", "age" : 65 }
{ "_id" : ObjectId("54d08fb70eb7b5f5718da82b"), "name" : "joe", "age" : 21 }
{ "_id" : ObjectId("54d08fbd0eb7b5f5718da82c"), "name" : "joe", "age" : 49 }
>
如果只對name和age感興趣,可以這樣查詢:
> db.people.find({"name":"joe","age":21})
{ "_id" : ObjectId("54d08fb70eb7b5f5718da82b"), "name" : "joe", "age" : 21 }
>
但是"_id"總是被返回,即便沒有指定。
可以使用第二個參數來剔除查詢結果中的某個鍵值對,例如,如果不希望顯示"friends" : 32的鍵值對:
> db.people.find({},{"friends":0})
{ "_id" : ObjectId("54d08a1d0eb7b5f5718da828"), "name" : "joe", "enemies" : 2 }
{ "_id" : ObjectId("54d08f7f0eb7b5f5718da82a"), "name" : "joe", "age" : 65 }
{ "_id" : ObjectId("54d08fb70eb7b5f5718da82b"), "name" : "joe", "age" : 21 }
{ "_id" : ObjectId("54d08fbd0eb7b5f5718da82c"), "name" : "joe", "age" : 49 }
>
也可以用來防止返回"_id":
> db.people.find({"age":21},{"_id":0})
{ "name" : "joe", "age" : 21 }
2、查詢條件
查詢不僅能精確匹配,還能匹配更加復雜的條件,比如范圍,OR子句或者取反。
2.1、查詢條件
查詢條件的比較操作符:
"$lt" 對應 <
"$lte" 對應<=
"$gt" 對應>
"$gte" 對應>=
"$ne" 對應“不相等”
> db.people.find({"age":{"$gte":30,"$lte":50}})
{ "_id" : ObjectId("54d08fbd0eb7b5f5718da82c"), "name" : "joe", "age" : 49 }
> db.people.find({"age":{"$ne":65}})
{ "_id" : ObjectId("54d08a1d0eb7b5f5718da828"), "name" : "joe", "friends" : 32,
"enemies" : 2 }
{ "_id" : ObjectId("54d08fb70eb7b5f5718da82b"), "name" : "joe", "age" : 21 }
{ "_id" : ObjectId("54d08fbd0eb7b5f5718da82c"), "name" : "joe", "age" : 49 }
"$ne" 用于所有數據的類型。
2.1、OR查詢
有兩種方式進行OR查詢。
"$in":可以用于查詢一個鍵的多個值;
"$or":完成多個鍵值的任意給定值。
2.1.1"$in"
對于單一鍵要是有多個值與其匹配的話,就要用"$in"加一個條件數組:
> db.people.find({"age":{"$in":[21,49,65]}})
{ "_id" : ObjectId("54d08f7f0eb7b5f5718da82a"), "name" : "joe", "age" : 65 }
{ "_id" : ObjectId("54d08fb70eb7b5f5718da82b"), "name" : "joe", "age" : 21 }
{ "_id" : ObjectId("54d08fbd0eb7b5f5718da82c"), "name" : "joe", "age" : 49 }
>
"$in"非常靈活,可以指定不同類型的條件和值:
> db.people.insert({"age":"kkk"})
WriteResult({ "nInserted" : 1 })
> db.people.find({"age":{"$in":[21,"kkk"]}})
{ "_id" : ObjectId("54d08fb70eb7b5f5718da82b"), "name" : "joe", "age" : 21 }
{ "_id" : ObjectId("54d334cbb174be28d017c1a6"), "age" : "kkk" }
>
要是"$in"對應的數組只有一個值,那么和直接匹配這個值的效果是一樣的。
> db.people.find({"age":{"$in":[21]}})
{ "_id" : ObjectId("54d08fb70eb7b5f5718da82b"), "name" : "joe", "age" : 21 }
> db.people.find({"age":21})
{ "_id" : ObjectId("54d08fb70eb7b5f5718da82b"), "name" : "joe", "age" : 21 }
>
2.1.1"$nin"
和"$in"相對的是"$nin",將返回與數組中所有條件都不匹配的文檔:
> db.people.find({"age":{"$nin":[21,49,65]}})
{ "_id" : ObjectId("54d08a1d0eb7b5f5718da828"), "name" : "joe", "friends" : 32,
"enemies" : 2 }
{ "_id" : ObjectId("54d334cbb174be28d017c1a6"), "age" : "kkk" }
>
2.1.1"$or"
"$or"接受一個包含所有可能條件的數組作為參數:
> db.people.find({"$or":[{"age":"kkk"},{"friends":32}]})
{ "_id" : ObjectId("54d08a1d0eb7b5f5718da828"), "name" : "joe", "friends" : 32,
"enemies" : 2 }
{ "_id" : ObjectId("54d334cbb174be28d017c1a6"), "age" : "kkk" }
>
同時"$or"可以包含其他條件句:
> db.people.find({"$or":[{"age":"kkk"},{"friends":32},{"age":{"$in":[21,65]}}]})
{ "_id" : ObjectId("54d08a1d0eb7b5f5718da828"), "name" : "joe", "friends" : 32,
"enemies" : 2 }
{ "_id" : ObjectId("54d08f7f0eb7b5f5718da82a"), "name" : "joe", "age" : 65 }
{ "_id" : ObjectId("54d08fb70eb7b5f5718da82b"), "name" : "joe", "age" : 21 }
{ "_id" : ObjectId("54d334cbb174be28d017c1a6"), "age" : "kkk" }
>
AND型的查詢,總是盡可能地用最少的條件來限定結果的范圍;而OR型的查詢則相反,第一個條件盡可能地匹配更多的文檔,這樣才是高效的。
另外有需要云服務器可以了解下創新互聯cdcxhl.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業上云的綜合解決方案,具有“安全穩定、簡單易用、服務可用性高、性價比高”等特點與優勢,專為企業上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。
本文標題:MongoDB的查詢-創新互聯
轉載注明:http://vcdvsql.cn/article20/ceopco.html
成都網站建設公司_創新互聯,為您提供服務器托管、微信公眾號、網站策劃、動態網站、企業建站、網站收錄
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯