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

溫馨提示×

溫馨提示×

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

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

MongoDB中怎么查詢數據

發布時間:2021-07-16 17:09:55 來源:億速云 閱讀:300 作者:Leah 欄目:大數據

MongoDB中怎么查詢數據,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。

在開始之前我們應該先準備數據方便演示,這里我插入的了幾條數據,數據如下:

db.user.insertMany( [{ name:'jack', age:22, sex:'Man', tags:['python','c++','c'], grades:[22,33,44,55], school:{ name:'shida', city:'xuzhou' } },{ name:'jhon', age:33, sex:null, tags:['python','java'], grades:[66,22,44,88], school:{ name:'kuangda', city:'xuzhou' } }, { name:'xiaoming', age:33, tags:['python','java'], grades:[66,22,44,88], school:{ name:'kuangda', city:'xuzhou' } } ] )

find( , )

其中 query 表示查找的條件,相當于 mysql 中 where 子句, projection 列出你想要查找的數據,格式為  db.collection.find(find(<query filter>, <projection>))

實例:

下面不帶參數的查找,將會查找出所有的結果

 db.find().pretty();          //輸出結果           {                                                              "_id" : ObjectId("59056f81299fe049404b2899"),          "name" : "jack",                                       "age" : 22,                                            "tags" : [                                                     "python",                                              "c++",                                                 "c"                                            ],                                                     "grades" : [                                                   22,                                                    33,                                                    44,                                                    55                                             ],                                                     "school" : {                                                   "name" : "shida",                                      "city" : "xuzhou"                              }                                              }

下面找出滿足 name 為 jack 的數據,并且只輸出 name , age ,這里的 _id 是默認輸出的,如果不想輸出將將它設置為 0  ,想要輸出那個字段將它設置為1

db.user.find({name:'jack'},{name:1,age:1})  //輸出結果 { "_id" : ObjectId("59056f81299fe049404b2899"), "name" : "jack", "age" : 22 }   db.user.find({name:'jack'},{name:1,age:1,_id:0})  //輸出結果 {"name" : "jack", "age" : 22 }

**注意這里的一個 projection 不能 同時 指定包括和排除字段,除了排除 _id 字段。 在 顯式包括 字段的映射中, _id  字段是***一個您可以 顯式排除 的。

查詢內嵌文檔

上述例子中插入的 school 數據就表示內嵌文檔

完全匹配查詢

完全匹配查詢表示 school 中的查詢數組必須和插入的數組完全一樣,順序都必須一樣才能查找出來

db.user.find({name:'jack',school:{name:'shida',city:'xuzhou'}});  //輸出結果  { "_id" : ObjectId("59056f81299fe049404b2899"), "name" : "jack", "age" : 22, "tags" : [ "python", "c++", "c" ],  "grades" : [ 22, 33, 44, 55 ], "school" : { "name" : "shida", "city" : "xuzhou" } }   //下面是指定輸出的字段,這里的school.name表示只輸出school文檔中name字段,必須加引號 db.user.find({name:'jack',school:{name:'shida',city:'xuzhou'}},{name:1,age:1,'school.name':1}); //輸出結果 { "_id" : ObjectId("59056f81299fe049404b2899"), "name" : "jack", "age" : 22, "school" : { "name" : "shida" } }

鍵值對查詢

可以通過鍵值對查詢,不用考慮順序,比如 'school.name':'shida' ,表示查詢學校名字為shida 的數據,這里的引號是必須要的

db.user.find({'school.name':'shida'},{name:1,school:1});  //輸出結果  { "_id" : ObjectId("59056f81299fe049404b2899"), "name" : "jack", "school" : { "name" : "shida", "city" : "xuzhou" } }

查詢操作符

下面我們將配合查詢操作符來執行復雜的查詢操作,比如元素查詢、 邏輯查詢 、比較查詢操作。我們使用下面的比較操作符 "$gt" 、 "$gte" 、  "$lt" 、 "$lte" (分別對應 ">" 、 ">=" 、 "<" 、 "<=" )

實例

下面查詢年齡在 20-30 之間的信息

db.user.find({ age:{$gt:20,$lt:30}   })  //輸出 { "_id" : ObjectId("59056f81299fe049404b2899"), "name" : "jack", "age" : 22, "tags" : [ "python", "c++", "c" ],  "grades" : [ 22, 33, 44, 55 ], "school" : { "name" : "shida", "city" : "xuzhou" } }

$ne

$ne 表示不相等,例如查詢年齡不等于 22 歲的信息

db.user.find({age:{$ne:22}})  //輸出 { "_id" : ObjectId("59057c16f551d8c9003d31e0"), "name" : "jhon", "age" : 33, "tags" : [ "python", "java" ],  "grades" : [ 66, 22, 44, 88 ], "school" : { "name" : "kuangda", "city" : "xuzhou" } }

slice

$slice 操作符控制查詢返回的數組中元素的個數。此操作符根據參數 { field: value } 指定鍵名和鍵值選擇出文檔集合,并且該文檔集合中指定  array 鍵將返回從指定數量的元素。如果 count 的值大于數組中元素的數量,該查詢返回數組中的所有元素的。

語法: db.collection.find( { field: value }, { array: {$slice: count }}) ;

下面將查詢 grades 中的前兩個數

db.user.find({name:'jack'},{grades:{$slice:2},name:1,age:1,'school.name':1});  //輸出,可以看出這里的grades只輸出了前面兩個  { "_id" : ObjectId("59057c16f551d8c9003d31df"), "name" : "jack", "age" : 22, "grades" : [ 22, 33 ], "school" : { "name" : "shida" } }

下面將輸出后3個數據

db.user.find({name:'jhon'},{grades:{$slice:-3},name:1});  //輸出 { "_id" : ObjectId("59057c16f551d8c9003d31e0"), "name" : "jhon", "grades" : [ 22, 44, 88 ] }

下面介紹指定一個數組作為參數。數組參數使用 [ skip , limit ]  格式,其中***個值表示在數組中跳過的項目數,第二個值表示返回的項目數。

db.user.find({name:'jack'},{grades:{$slice:[2,2]},name:1});  //這里將會跳過前面的兩個,直接得到后面的兩個數據   //輸出  { "_id" : ObjectId("59057c16f551d8c9003d31df"), "name" : "jack", "grades" : [ 44, 55 ] }

$exists

如果 $exists 的值為 true ,選擇存在該字段的文檔,若值為 false 則選擇不包含該字段的文檔

下面將會查詢不存在sex這一項的信息

db.user.find({sex:{$exists:false}})  //結果 { "_id" : ObjectId("59058460fe58ed1089f2a5cd"), "name" : "xiaoming", "age" : 33, "tags" : [ "python", "java" ],  "grades" : [ 66, 22, 44, 88 ], "school" : { "name" : "kuangda", "city" : "xuzhou" } }   db.user.find({sex:{$exists:true}});  //結果 { "_id" : ObjectId("59058460fe58ed1089f2a5cb"), "name" : "jack", "age" : 22, "sex" : "Man", "tags" : [ "python", "c++", "c" ],  "grades" : [ 22, 33, 44, 55 ], "school" : { "name" : "shida", "city" : "xuzhou" } } { "_id" : ObjectId("59058460fe58ed1089f2a5cc"), "name" : "jhon", "age" : 33, "sex" : null, "tags" : [ "python", "java" ],  "grades" : [ 66, 22, 44, 88 ], "school" : { "name" : "kuangda", "city" : "xuzhou" } }

$or

執行邏輯 OR 運算,指定一個至少包含兩個表達式的數組,選擇出至少滿足數組中一條表達式的文檔。

語法: { $or: [ { <expression1> }, { <expression2> }, ... , {  <expressionN> } ] }

下面將要查找 age 等于 22 或者 age 等于 33 的值

db.user.find({$or:[{age:22},{age:33}]})  //結果  { "_id" : ObjectId("59058460fe58ed1089f2a5cb"), "name" : "jack", "age" : 22, "sex" : "Man", "tags" : [ "python", "c++", "c" ],  "grades" : [ 22, 33, 44, 55 ], "school" : { "name" : "shida", "city" : "xuzhou" } } { "_id" : ObjectId("59058460fe58ed1089f2a5cc"), "name" : "jhon", "age" : 33, "sex" : null, "tags" : [ "python", "java" ],  "grades" : [ 66, 22, 44, 88 ], "school" : { "name" : "kuangda", "city" : "xuzhou" } } { "_id" : ObjectId("59058460fe58ed1089f2a5cd"), "name" : "xiaoming", "age" : 33, "tags" : [ "python", "java" ],  "grades" : [ 66, 22, 44, 88 ], "school" : { "name" : "kuangda", "city" : "xuzhou" } }

下面將會查找出年齡為22或者33并且姓名為 jack 的人的信息

db.user.find({name:'jack',$or:[{age:33},{age:22}]})  //結果  { "_id" : ObjectId("59058460fe58ed1089f2a5cb"), "name" : "jack", "age" : 22, "sex" : "Man", "tags" : [ "python", "c++", "c" ],  "grades" : [ 22, 33, 44, 55 ], "school" : { "name" : "shida", "city" : "xuzhou" } }

$and

指定一個至少包含兩個表達式的數組,選擇出滿足該數組中所有表達式的文檔。 $and 操作符使用短路操作,若***個表達式的值為“ false  ”,余下的表達式將不會執行。

語法: { $and: [ { <expression1> }, { <expression2> } , ... , {  <expressionN> } ] }

下面將會查找年齡在 20-30 之間的信息,對于下面使用逗號分隔符的表達式列表, MongoDB會提供一個隱式的 $and 操作:

db.user.find({$and:[{age:{$gt:20}},{age:{$lt:30}}]}) //上述語句相當于db.user.find({age:{$gt:20},age:{$lt:30}})  //結果 { "_id" : ObjectId("59058460fe58ed1089f2a5cb"), "name" : "jack", "age" : 22, "sex" : "Man", "tags" : [ "python", "c++", "c" ],  "grades" : [ 22, 33, 44, 55 ], "school" : { "name" : "shida", "city" : "xuzhou" } }

$in

匹配鍵值等于指定數組中任意值的文檔。類似 sql 中 in ,只要匹配一個 value 就會輸出

語法: { field: { $in: [<value1>, <value2>, ... <valueN> ] }  }

下面將會查找grades中存在22,33之間的任意一個數的信息

 db.user.find({grades:{$in:[22,33]}})    //輸出   { "_id" : ObjectId("59058460fe58ed1089f2a5cb"), "name" : "jack", "age" : 22, "sex" : "Man", "tags" : [ "python", "c++", "c" ],  "grades" : [ 22, 33, 44, 55 ], "school" : { "name" : "shida", "city" : "xuzhou" } } { "_id" : ObjectId("59058460fe58ed1089f2a5cc"), "name" : "jhon", "age" : 33, "sex" : null, "tags" : [ "python", "java" ],  "grades" : [ 66, 22, 44, 88 ], "school" : { "name" : "kuangda", "city" : "xuzhou" } } { "_id" : ObjectId("59058460fe58ed1089f2a5cd"), "name" : "xiaoming", "age" : 33, "tags" : [ "python", "java" ],  "grades" : [ 66, 22, 44, 88 ], "school" : { "name" : "kuangda", "city" : "xuzhou" } }

$nin

匹配鍵不存在或者鍵值不等于指定數組的任意值的文檔。類似 sql 中 not in (SQL中字段不存在使用會有語法錯誤).

查詢出 grades 中不存在100或者44的文檔

db.user.find({grades:{$nin:[100,44]}})

$not

執行邏輯 NOT 運算,選擇出不能匹配表達式的文檔 ,包括沒有指定鍵的文檔。 $not 操作符不能獨立使用,必須跟其他操作一起使用

語法:{ field: { $not: { } } }

查詢年齡不大于30的信息

db.user.find({age:{$not:{$gt:30}}})  //輸出 { "_id" : ObjectId("59058460fe58ed1089f2a5cb"), "name" : "jack", "age" : 22, "sex" : "Man", "tags" : [ "python", "c++", "c" ],  "grades" : [ 22, 33, 44, 55 ], "school" : { "name" : "shida", "city" : "xuzhou" } }

看完上述內容,你們掌握MongoDB中怎么查詢數據的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

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

AI

平潭县| 婺源县| 姜堰市| 长丰县| 平和县| 历史| 金川县| 江西省| 隆德县| 皋兰县| 思茅市| 江都市| 大理市| 洛宁县| 中超| 克什克腾旗| 达尔| 沙河市| 铜陵市| 如皋市| 南安市| 宣恩县| 汉中市| 皮山县| 新邵县| 莆田市| 延边| 确山县| 巴彦县| 临城县| 措勤县| 开阳县| 白山市| 凤山县| 阳朔县| 诸暨市| 綦江县| 教育| 海林市| 惠来县| 涿州市|