欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MongoDB數(shù)據(jù)查詢方法干貨篇

 更新時間:2017年05月02日 08:43:30   作者:Chenjiabing  
查詢操作在我們?nèi)粘2僮鲾?shù)據(jù)庫的時候是必不可少的一部分,最近有些空閑時間,所有就將MongoDB數(shù)據(jù)查詢的一些方法技巧總結(jié)了處理,這篇文章主要介紹了MongoDB數(shù)據(jù)查詢的相關(guān)資料,需要的朋友可以參考借鑒,一起來看看吧。

本文主要給大家介紹了MongoDB數(shù)據(jù)查詢的相關(guān)內(nèi)容,對大家具有一定的參考價值,需要的朋友們一起來學(xué)習(xí)學(xué)習(xí)吧。

導(dǎo)入測試數(shù)據(jù)

在開始之前我們應(yīng)該先準備數(shù)據(jù)方便演示,這里我插入的了幾條數(shù)據(jù),數(shù)據(jù)如下:

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表示查找的條件,相當(dāng)于mysql中where子句,projection列出你想要查找的數(shù)據(jù),格式為db.collection.find(find(<query filter>, <projection>))

實例:

下面不帶參數(shù)的查找,將會查找出所有的結(jié)果

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

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

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

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

查詢內(nèi)嵌文檔

上述例子中插入的school數(shù)據(jù)就表示內(nèi)嵌文檔

完全匹配查詢

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

db.user.find({name:'jack',school:{name:'shida',city:'xuzhou'}});
//輸出結(jié)果
{ "_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});
//輸出結(jié)果
{ "_id" : ObjectId("59056f81299fe049404b2899"), "name" : "jack", "age" : 22, "school" : { "name" : "shida" } }

鍵值對查詢

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

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

查詢操作符

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

實例

下面查詢年齡在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操作符控制查詢返回的數(shù)組中元素的個數(shù)。此操作符根據(jù)參數(shù){ field: value } 指定鍵名和鍵值選擇出文檔集合,并且該文檔集合中指定array鍵將返回從指定數(shù)量的元素。如果count的值大于數(shù)組中元素的數(shù)量,該查詢返回數(shù)組中的所有元素的。

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

下面將查詢grades中的前兩個數(shù)

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個數(shù)據(jù)

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

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

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

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

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

db.user.find({sex:{$exists:false}})
//結(jié)果
{ "_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}});
//結(jié)果
{ "_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

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

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

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

db.user.find({$or:[{age:22},{age:33}]})
//結(jié)果
{ "_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}]})
//結(jié)果
{ "_id" : ObjectId("59058460fe58ed1089f2a5cb"), "name" : "jack", "age" : 22, "sex" : "Man", "tags" : [ "python", "c++", "c" ], "grades" : [ 22, 33, 44, 55 ], "school" : { "name" : "shida", "city" : "xuzhou" } }

$and

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

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

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

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

$in

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

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

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

 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

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

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

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

$not

執(zhí)行邏輯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" } }

迭代游標的查詢

學(xué)過高級語言的朋友都知道迭代的問題,像java,下面使用迭代的方法查詢

var cursor=db.usr.find();
//這里使用迭代輸出所有的數(shù)據(jù)
while(cursor.hasNext()) //這里的hasNext()是判斷是否下一個中還有可迭代的值,如果沒有返回false
{
 printjson(cursor.next()); //這里的cursor.next是迭代的輸出,printjson是代替print(tojson()) 
}
print cursor.count() //輸出其中有多少個數(shù)據(jù)
cursor.forEach(printjson); //forEach輸出
var document=cursor.toArray(); //將迭代對象轉(zhuǎn)換成數(shù)組
print document[0]; //以數(shù)組的形式輸出

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關(guān)文章

  • MongoDB在系統(tǒng)數(shù)據(jù)庫local中無法創(chuàng)建用戶的解決辦法

    MongoDB在系統(tǒng)數(shù)據(jù)庫local中無法創(chuàng)建用戶的解決辦法

    這篇文章主要給大家介紹了關(guān)于MongoDB在系統(tǒng)數(shù)據(jù)庫local中無法創(chuàng)建用戶的解決辦法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-11-11
  • mongodb driver使用代碼詳解

    mongodb driver使用代碼詳解

    MongoDB 是一個基于分布式文件存儲的數(shù)據(jù)庫,由 C++ 語言編寫,這篇文章主要介紹了mongodb driver使用,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-03-03
  • 深究從MongoDB的ObjectId中獲取時間信息

    深究從MongoDB的ObjectId中獲取時間信息

    MongoDB默認使用_id字段作為主鍵,類型為ObjectId。ObjectId的生成有一定的規(guī)則,詳情可以查看這篇文章MongoDB深究之ObjectId
    2017-03-03
  • mongoDB 4.0事務(wù)回滾的辛酸歷程探究

    mongoDB 4.0事務(wù)回滾的辛酸歷程探究

    這篇文章主要給大家介紹了關(guān)于mongoDB 4.0事務(wù)回滾的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學(xué)習(xí)或者使用MongoDB具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-07-07
  • mongodb 中rs.stauts()命令參數(shù)解析

    mongodb 中rs.stauts()命令參數(shù)解析

    MongoDB的rs.status()命令是查看副本集狀態(tài)的重要工具,它可以展示副本集中各個成員的角色、健康狀態(tài)、同步進度等關(guān)鍵信息,本文介紹mongodb 中rs.stauts()命令參數(shù)解析,感興趣的朋友跟隨小編一起看看吧
    2024-09-09
  • 一文搞懂Scrapy與MongoDB交互過程

    一文搞懂Scrapy與MongoDB交互過程

    這篇文章主要介紹了Scrapy與MongoDB交互過程,文末給大家介紹了類方法@classmethod的相關(guān)知識,需要的朋友可以參考下
    2022-07-07
  • Mongodb啟動命令參數(shù)中文說明

    Mongodb啟動命令參數(shù)中文說明

    這篇文章主要介紹了Mongodb啟動命令參數(shù)中文說明,本文包括基本配置、主/從參數(shù)、Sharding(分片)選項等內(nèi)容,需要的朋友可以參考下
    2014-10-10
  • Mongodb中嵌套文檔數(shù)組查詢操作

    Mongodb中嵌套文檔數(shù)組查詢操作

    這篇文章主要介紹了Mongodb對嵌套文檔數(shù)組進行查詢操作,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-07-07
  • 淺析MongoDB 全文檢索

    淺析MongoDB 全文檢索

    這篇文章主要介紹了MongoDB 全文檢索的相關(guān)資料,文中講解非常細致,幫助大家更好的學(xué)習(xí)了解MongoDB,感興趣的朋友可以了解下
    2020-07-07
  • mongoDB4.2.8備份恢復(fù)與導(dǎo)出導(dǎo)入(推薦)

    mongoDB4.2.8備份恢復(fù)與導(dǎo)出導(dǎo)入(推薦)

    這篇文章主要介紹了mongoDB4.2.8備份恢復(fù)與導(dǎo)出導(dǎo)入的相關(guān)知識,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-12-12

最新評論