您好,登錄后才能下訂單哦!
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型的查詢則相反,第一個條件盡可能地匹配更多的文檔,這樣才是最高效的。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。