日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

lambdaquerywrapper查询指定字段_MongoDB系列 | 高级查询与索引(四)

發布時間:2024/9/3 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 lambdaquerywrapper查询指定字段_MongoDB系列 | 高级查询与索引(四) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1 . 覆蓋索引查詢

?所有的查詢字段都是索引的一部分;所有的查詢返回字段在同一個索引中。

由于索引存在于 RAM 中,因而從索引中獲取數據要比掃描文檔更快。

范例:

創建如下 users 集合(使用前面所學的方法創建該集合):

{"contact": "987654321","dob": "01-01-1991","gender": "M","name": "Tom Benzamin","user_name": "tombenzamin" }

在 users 中創建一個聯合索引:

> db.users.ensureIndex({gender:1,user_name:1})

該索引會覆蓋下面的查詢:

> db.users.find({gender:"M"},{user_name:1,_id:0})

對于上述查詢,MongoDB 不會在數據庫文件中查找,而會從索引中提取數據。因為索引中不包含 _id 字段,所以 _id 在查詢中會默認返回,可以在查詢結果中將其排除。而 db.users.find({gender:"M"},{user_name:1}) 就不會被索引覆蓋。

2 . 高級索引

創建如下 users 集合(使用前面所學的方法創建該集合):

{"address": {"city": "chengdu","province": "sichuan","pincode": "123"},"tags": ["music","cricket","blogs"],"name": "clound" }

索引數組字段,在數組中創建索引,需要對數組中的每個字段依次建立索引。所以在我們為數組 tags 創建索引時,會為 music、cricket、blogs 三個值建立單獨的索引。

范例:

> db.users.ensureIndex({"tags":1})

創建索引后,我們可以這樣檢索集合的 tags 字段:

> db.users.find({tags:"cricket"})

為了驗證我們使用了索引,可以使用 explain 命令:

> db.users.find({tags:"cricket"}).explain()

2.1 索引子文檔字段

假設我們需要通過 city、province、pincode 字段來檢索文檔,由于這些字段是子文檔的字段,所以我們需要對子文檔建立索引。

范例:

為子文檔的三個字段創建索引,命令如下:

> db.users.ensureIndex({"address.city":1,"address.province":1,"address.pincode":1})

一旦創建索引,我們可以使用子文檔的字段來檢索數據:

> db.users.find({"address.city":"chengdu"})

記住查詢表達式必須遵循指定的索引的順序。所以上面創建的索引將支持以下查詢:

> db.users.find({"address.city":"chengdu","address.province":"sichuan"})

同樣支持以下查詢:

> db.users.find({"address.city":"chengdu","address.province":"sichuan","address.pincode":"123"})

3 . 原子操作

所謂原子操作,就是要么執行成功,要么執行失敗,執行成功完成既定任務,執行失敗還原執行前的狀態。

常用原子操作命令:

3.1 $set

用來指定一個鍵并更新鍵值,若鍵不存在則創建。

{ $set : { field : value } }

3.2 $unset

用來刪除一個鍵。

{ $unset : { field : 1} }

3.3 $inc

$inc 可以對文檔的某個值為數字型(只能為滿足要求的數字)的鍵進行增減的操作。

{ $inc : { field : value } }

3.4 $push

把 value 追加到 field 里面去,field 一定要是數組類型才行,如果 field 不存在,會新增一個數組類型加進去。

{ $push : { field : value } }

3.5 $pushAll

同 $push ,只是一次可以追加多個值到一個數組字段內。

{ $pushAll : { field : value_array } }

3.6 $pull

從數組 field 內刪除一個等于 value 值。

{ $pull : { field : _value } }

3.7 $addToSet

增加一個值到數組內,而且只有當這個值不在數組內才增加。

3.8 $pop

刪除數組的第一個或最后一個元素。

{ $pop : { field : 1 } }

3.9 $rename

修改字段名稱:

{ $rename : { old_field_name : new_field_name } }

3.10 $bit

位操作,integer 類型

{$bit : { field : {and : 5}}}

4 . 查詢分析

4.1 explain()

explain() 操作提供了查詢信息,使用索引及查詢統計等。有利于我們對索引的優化。接下來我們在 users 集合中創建 gender 和 user_name 的索引:

> db.users.ensureIndex({gender:1,user_name:1}) > db.users.find({gender:"M"},{user_name:1,_id:0}).explain()

4.2 hint()

雖然 MongoDB 查詢優化器一般工作的很不錯,但是也可以使用 hints() 來強迫 MongoDB 使用一個指定的索引。通過這種方法在某些情形下會提升性能。

范例:

指定使用 gender 和 user_name 索引字段來查詢:

> db.users.find({gender:"M"},{user_name:1,_id:0}).hint({gender:1,user_name:1})

可以使用 explain() 函數來分析以上查詢:

> db.users.find({gender:"M"},{user_name:1,_id:0}).hint({gender:1,user_name:1}).explain()

總結

以上是生活随笔為你收集整理的lambdaquerywrapper查询指定字段_MongoDB系列 | 高级查询与索引(四)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。