中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

MongoDB的查詢

發布時間:2020-07-27 20:54:27 來源:網絡 閱讀:282 作者:gfsunny 欄目:MongoDB數據庫

    MongoDB使用find來查詢,不指定任何參數說明是對整個集合的文檔查詢。

  1. 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型的查詢則相反,第一個條件盡可能地匹配更多的文檔,這樣才是最高效的。


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

吴桥县| 富蕴县| 五常市| 湖北省| 龙口市| 修武县| 宁城县| 绥江县| 象山县| 阿克陶县| 濮阳县| 彩票| 通山县| 五家渠市| 青浦区| 含山县| 赤水市| 邢台县| 宜宾县| 聂拉木县| 汉沽区| 牡丹江市| 嘉定区| 乐亭县| 穆棱市| 九台市| 庄河市| 尼勒克县| 德昌县| 湖北省| 长兴县| 宁河县| 泸溪县| 四子王旗| 米易县| 牡丹江市| 通江县| 乐亭县| 工布江达县| 滨海县| 吉首市|