mongodb 查詢語句學習筆記

基礎查詢

正則查詢

{status: 'A',$or: [{ qty: { $lt: 30 } }, { item: { $regex: '^p' } }]
}

AND 查詢

{ "size.h": { $lt: 15 }, "size.uom": "in", status: "D" }

OR 查詢

{ $or: [ { status: "A" }, { qty: { $lt: 30 } } ] }

AND 和 OR 混合

{ status: "A", $or: [ { qty: { $lt: 30 } }, { item: /^p/ } ] }

嵌套對象查詢

用點號來查詢嵌套字段

這種方式寫的帶點號的字段必須包含在雙引號之中

{ "size.h": { $lt: 15 } }
{ "size.uom": "in" }

匹配嵌套文檔對象

注意?這種查詢方式是字段順序相關的,也就是說:

{item: 'journal',qty: 25,size: { h: 14, w: 21, uom: 'cm' },status: 'A'
},// 查得到數據
{ size: { h: 14, w: 21, uom: "cm" } }// 查不到數據
{ size: { w: 21, h: 14, uom: "cm" } }

數組查詢

數組類型的匹配查詢時,也是順序相關的

{ tags: ["red", "blank"] }

在這里插入圖片描述

// 查詢到不一樣的結果
{ tags: ["blank", "red"] }

在這里插入圖片描述

查詢一個數組值中包含指定的復數成員, 順序無關

{ tags: { $all: ["red", "blank"] } }

查詢一個數組中是否至少包含一個指定的成員

// tags 是一個數組,查詢是否有成員 red
{ tags: "red" }

查詢文檔中所有記錄的 dim_cm 數組,獲取其中至少有一個成員值大于 25 的記錄

{ dim_cm: { $gt: 25 } }

比較特殊的樣例, 當數組值查詢時, 數組中任一成員滿足其中一個條件,就會被認定為符合條件

{ dim_cm: { $gt: 15, $lt: 20 } }

比如這一條,只要 dim_cm 中有成員值大于 15 或者小于 20,本條記錄就會被返回。而不是直覺上的同時滿足大于 15 和小于 20

在這里插入圖片描述

使用 $elemMatch 來完成復數條件查詢

上面的反例,想要查詢任一成員同時滿足多個條件的數組時,需要用 $elemMatch

{ dim_cm: { $elemMatch: { $gt: 22, $lt: 30 } } }

對比剛剛的查詢,結果數變少了

在這里插入圖片描述

對固定位置的元素進行查詢

使用前面嵌套字段查詢提到的 . 操作符,可以對數組字段中指定位置的元素值進行查詢

{ "dim_cm.1": { $gt: 25 } }

指定數組的長度條件

查詢 tags 的成員數等于 3 的記錄

{ "tags": { $size: 3 } }

對象數組的查詢

成員值完全匹配查詢

查詢成員字段 warehouse = ‘A’ 和 qty = 5 的記錄,順序相關

{ "instock": { warehouse: "A", qty: 5 } }

對成員中的某個字段查詢

. 操作符的使用

查詢 instock 成員中 qty >= 20 的記錄

{ 'instock.qty': { $lte: 20 } }

對固定位置的成員進行查詢

{ 'instock.0.qty': { $gt: 10, $lte: 20 } }

查詢至少一個成員滿足復數條件的文檔

使用 $elemMatch 可以進行復數條件查詢,順序無關。前面沒有使用 $elemMatch 就是值查詢,是順序相關的。

{ "instock": { $elemMatch: { qty: 5, warehouse: "A" } } }

查詢成員滿足任意條件的文檔

會查出有成員 qty > 10 或者 qty <= 20 的文檔

{ "instock.qty": { $gt: 10,  $lte: 20 } }

另一個樣例:
這里也是只要有成員滿足這兩個條件之一,這條記錄就會被查到,不必要有一個成員同時滿足兩個條件。

{ "instock.qty": 5, "instock.warehouse": "A" }

在這里插入圖片描述

查詢成員字段同時滿足多個條件

這個例子官方文檔沒有提到, 和上面的對比是現在至少一個成員的 qty 值要同時滿足兩個條件才會被查到

{ "instock": { $elemMatch: { qty: { $gt: 10,  $lte: 20  } }  } }

總結一下的點操作符用到的場景

  1. 嵌套對象字段查詢
{ "size.h": { $lt: 15 } }
{ "size.uom": "in" }
  1. 數組固定位置的元素進行查詢
{ "dim_cm.1": { $gt: 25 } }
  1. 對象數組中對成員字段進行查詢
{ 'instock.qty': { $lte: 20 } }
  1. 對象數組中對固定位置的成員進行查詢
{ 'instock.0.qty': { $gt: 10, $lte: 20 } }

Project 返回你想要的字段

基礎使用

在填寫 project 的地方傳入下面的對象,返回的記錄中就只會有 itemstatus 和一個默認的 _id 字段

{ item: 1, status: 1 }

在這里插入圖片描述

刪除 _id

不想要 _id 就在 project 里面給個 0 值就行

{ item: 1, status: 1, _id: 0 }

在這里插入圖片描述

上面的語句同時使用了 1 來標記需要展示字段,和 0 來刪除 _id,這種用法僅限于 _id 字段

僅刪除不需要的字段

有時需要顯示的字段很多,不需要的很少,可以僅用 0 刪除不需要的字段。

{ status: 0, instock: 0 }

在這里插入圖片描述

嵌套對象的 Project

就用前面學到的 . 操作符就好了

{ item: 1, status: 1, "size.uom": 1 }

在這里插入圖片描述

僅刪除不要字段也是給個 0 就行

{ "size.uom": 0 }

對象數組中的 Project

返回結果的 instock 數組成員僅有 qty 字段

{ item: 1, status: 1, "instock.qty": 1 }

在這里插入圖片描述

數組元素的 Project

  • $elemMatch

對數組元素的 Project 會復雜一些,官方提供了三種操作:
$elemMatch, $slice, $

首先是前面見得比較多的 $elemMatch, 當這個從操作出現在 Project 里面時,就是對數組字段的成員進行篩選,返回符合條件第一個成員。

{"students": { $elemMatch: { age: { $gte: 10, $lte: 20 } } }}

在這里插入圖片描述

  • $slice

對數組成員進行切片,三種語法

$slice: 正數
返回數組的前 2 個成員

{"students": { $slice: 2 }}

$slice: 負數
返回數組的后 2 個成員

{"students": { $slice: -2 }}

$slice: [n, m]
先跳過數組的前 n 個成員,再返回 m 個成員

{"students": {$slice: [1, 2]}}
  • $

這個符號需要在查詢時有對數組字段附加了查詢條件,這樣就可以在 Project 時用這個符號來返回符合查詢條件的第一個成員

query: {zipcode: "63109", "students.age": { $gt: 10 }}
project: {"students.$": 1}

在這里插入圖片描述

管道 Aggregation (持續更新,創作中)

管道可以說是 MongoDB 最核心的東西了。

$unwind

對一個數組字段 $unwind, 就會將數組的每個成員當成輸入,然后根據情況不斷替換原來的數組字段,并產生一個新的文檔

舉例:

{ "_id" : 1, "item" : "ABC1", sizes: [ "S", "M", "L"] }

對 sizes 進行 $unwind

db.inventory.aggregate( [ { $unwind : "$sizes" } ] )

得到結果:
原本的數組成員被展開了,分別替換原來的數組字段形成新的文檔

{ "_id" : 1, "item" : "ABC1", "sizes" : "S" }
{ "_id" : 1, "item" : "ABC1", "sizes" : "M" }
{ "_id" : 1, "item" : "ABC1", "sizes" : "L" }

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/37942.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/37942.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/37942.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

2024年機動車簽字授權人題庫,助你沖刺!絕對不會讓你后悔!

61.&#xff08;&#xff09;使汽車按駕駛人選定的方向行駛。 A.傳動系統 B.行駛系統 C.轉向系統 D.制動系統 答案&#xff1a;C 62.&#xff08;&#xff09;使汽車各總成及部件安裝在適當的位置&#xff0c;對全車起支承作用以保證汽車正常行駛。 A.傳動系統 B.行駛系…

01.計算機圖形學概述

01.計算機圖形學概述 從技術的角度上看&#xff0c;什么是一個好的畫面&#xff1f; 直接看這個畫面是不是足夠亮&#xff0c;這體現了渲染中的一個技術叫全局光照。 應用范圍 游戲&#xff08; Video Games&#xff09;電影/特效&#xff08; Movies&#xff09;動漫/動畫&…

如何讓Linux系統變得更安全?

本文嘗試從linux安全加固、漏洞利用及防御措施、安全意識三個方面思考如何讓linux系統變得更加安全. 一、linux常見安全加固操作 對Linux系統進行詳細的安全加固操作,可以從多個方面進行,包括系統更新和補丁管理、用戶和權限管理、網絡安全配置、文件和系統安全、日志和審計…

Qt代碼分析

要使用代碼分析工具&#xff0c;請在Analyze菜單或(Start Debugging of Startup Project)按鈕的下拉菜單中選擇它。當您處于調試模式時&#xff0c;您可以通過在調試器工具欄上的菜單中選擇工具來切換工具。 您可以將調試模式下的視圖拖放到屏幕上的新位置。意見的大小和立場將…

c++關鍵字default,delete

文章目錄 概述defaultdelete 小結 概述 在看一些開源項目的源碼的時候&#xff0c;經常會看到default和delete。這2個關鍵字究竟什么意思呢&#xff1f;這篇文章就來一點一點拆解下。 default 默認構造函數、拷貝構造函數、移動構造函數、拷貝賦值運算符、移動賦值運算符和析…

HDFS學習

3.5 HDFS存儲原理 3.5.1 冗余數據保存 作為一個分布式文件系統&#xff0c;為了保證系統的容錯性和可用性&#xff0c;HDFS采用了多副本方式對數據進行冗余存儲&#xff0c;通常一個數據塊的多個副本會被分布到不同的數據節點上。 如圖所示&#xff0c;數據塊1被分別存放到…

石油化工廠為什么要用專業防爆手機?

防爆手機之所以必須使用專業設計的產品&#xff0c;主要是出于安全考慮&#xff0c;以防止在易燃易爆環境中因手機使用不當引發爆炸事故。以下幾點詳細解釋了使用專業化工防爆手機的必要性&#xff1a; 本質安全設計&#xff1a;頂堅專業防爆手機采用了本質安全&#xff08;本安…

動手學深度學習(Pytorch版)代碼實踐 -計算機視覺-47轉置卷積

47轉置卷積 import torch from torch import nn from d2l import torch as d2l# 輸入矩陣X和卷積核矩陣K實現基本的轉置卷積運算 def trans_conv(X, K):h, w K.shapeY torch.zeros((X.shape[0] h - 1, X.shape[1] w - 1))for i in range(X.shape[0]):for j in range(X.shap…

昇思25天學習打卡營第5天|數據變換Transforms

數據變換Transforms 介紹Transforms分類Common TransformsVision TransformsText TransformsPythonTokenizer LookupLambda Transforms 參考 介紹 MindSpore提供不同種類的數據變換&#xff08;Transforms&#xff09;&#xff0c;配合數據處理Pipeline來實現數據預處理。 所有…

【ROS】apt 找不到 ROS版本?(ROS1和ROS2通用方案)

問題描述 安裝ROS底層系統時&#xff0c;經常遇到一個情況就是apt找不到ros的對應版本 解決方案 添加ros官方給的apt源和安裝密鑰 ROS1 # ros獎項 sudo sh -c echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.li…

數學建模 —— MATLAB中的向量

目錄 向量的創建方法 (1)直接輸入法 (2)冒號法&#xff08;常用&#xff09; (3)利用MATLAB函數創建 linspace函數 logspace函數 向量元素的引用 (1)單個元素引用 (2)多個元素引用 向量元素的修改和刪除 向量的創建方法 在 MATLAB中&#xff0c;向量的創建方法主要有…

微軟Edge瀏覽器多用戶配置文件管理:個性化瀏覽體驗

在家庭或工作環境中&#xff0c;經常需要在同一臺計算機上為多個用戶創建和管理獨立的瀏覽體驗。微軟Edge瀏覽器提供了多用戶配置文件管理功能&#xff0c;允許用戶為每個賬戶設置獨立的書簽、歷史記錄、密碼、擴展和設置。本文將詳細介紹如何在微軟Edge中管理多個用戶配置文件…

連接Sql Server時報錯:無法通過使用安全套接字層加密與 SQL Server 建立安全連接

JDBC連接Sql Server時報錯:無法通過使用安全套接字層加密與 SQL Server 建立安全連接 前言解決辦法一解決辦法二總結 前言 今天使用jdbc連接sql server突然報錯為&#xff1a;SQLServerException: “Encrypt”屬性設置為“true”且 “trustServerCertificate”屬性設置為“fals…

GoMate:配置化模塊化的Retrieval-Augmented Generation (RAG) 框架

文章目錄 GoMate簡介1.1 GoMate的核心技術文檔解析向量存儲嵌入模型問題查詢文本生成文檔更新 1.2 GoMate的應用領域智能客服知識庫構建內容生成教育培訓法律文書處理 GoMate的產品特色2.1 文檔解析2.2 向量存儲2.3 嵌入模型2.4 問題查詢2.5 文本生成2.6 文檔更新 GoMate的使用…

解決SPA(單頁應用)首屏加載速度慢

SPA是目前流行的前端開發模式&#xff0c;相對于傳統的多頁面用戶體驗更好&#xff0c;操作更順暢&#xff0c;開發效率也更高。但是SPA首屏加載速度慢一直是個致命的問題&#xff0c;由于SPA應用首次打開需要一次性加載大量的靜態資源&#xff0c;這就導致了加載速度慢的問題&…

監聽設備方向變化?分享 1 段優質 JS 代碼片段!

大家好&#xff0c;我是大澈&#xff01; 本文約 700 字&#xff0c;整篇閱讀約需 1 分鐘。 每日分享一段優質代碼片段。 今天分享一段 JS 代碼片段&#xff0c;用于在H5端監聽設備方向的變化。 老規矩&#xff0c;先閱讀代碼片段并思考&#xff0c;再看代碼解析再思考&#…

文件夾內-資源名稱前加序號排列

問題&#xff1a;在文件夾下的資源可以按時間排序&#xff0c;導入unity后資源順序會亂掉&#xff0c;不方便按順序賦值&#xff0c;為了方便&#xff0c;通過下面方法在文件夾下統一在資源名稱前按順序加上序號 win11在文件夾內右鍵&#xff0c;選擇——在終端中打開 輸入&a…

制造企業用AI可以做什么?

ChatGPT橫空出世&#xff0c;有關AI的浪潮席卷全球&#xff0c;比起人工智能如何改變世界&#xff0c;可能你更感興趣我能用AI可以做的事情是什么&#xff1f; 制造企業用AI可以做的事情是什么?人工智能在制造企業中可以做很多事情&#xff0c;以下是一些主要的應用&#xff1…

企業源代碼加密軟件丨透明加密技術是什么

在一個繁忙的軟件開發公司中&#xff0c;兩位員工小李和小張正在討論源代碼安全的問題。 “小張&#xff0c;你有沒有想過我們的源代碼如果被泄露了怎么辦&#xff1f;”小李擔憂地問。 “是啊&#xff0c;這是個大問題。源代碼是我們的核心競爭力&#xff0c;一旦泄露&#…

LUA 語言中subtree 的使用教程

在線編輯器&#xff1a; https://www.runoob.com/try/runcode.php?filenameHelloWorld&typelua 在Lua語言中&#xff0c;"subtree"通常指的是一個子表或者子樹&#xff0c;它指的是一個Lua表&#xff08;table&#xff09;中的一個部分&#xff0c;可以是一個單…