<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                [toc] ## 查看數據庫 ``` show dbs ``` 默認已經存在的數據庫 - admin - local ## 原生查詢 ### 嵌套文檔的查詢 想要的是數組成員或則普通類型 ``` >db.users.find({hobbies:"eat"}); { ... "name":"ahhh" "hobbies":["eat","baseball"] } ``` 想要的是對象成員,并且還能夠無線`.`縱深下去 ``` >db.users.find({"hobbies.eat":{$exists:true}}); { ... "name":"ahhh" "hobbies":{ "eat":{"desc":"so high"} } } ``` 對象里面包數組,查找數組成員中name為hiking的 ``` >db.users.find({hobbies.name:"hiking"}); { ... "name":"ahhh" "hobbies":[ { "name":"hiking" ,"level":"great" } ,{ "name":"painting" ,"level":"fine" } ] } ``` 對象里面包數組,查找數組成員中第一個name為hiking的的 ``` db.users.find({"hobbies.0.name":"hiking"}) ``` ### findOne 只會查找一條文檔記錄 ``` >db.students.findOne(); ``` ### find 查看集合下所有文檔 ``` >db.students.find(); >db.students.find().pretty(); //pretty會優化顯示格式 ``` #### 篩選顯示字段 1:顯示該字段 0:不顯示該字段 當一個`{}`只設置一個字段時,`1`和`0`代表的是只顯示該字段和除了該字段都顯示。 當一個`{}`中設置了多個字段時,`1`和`0`不能同時存在,只能全是1或則全是0(**除了`_id`**) > **注意:** 以下會報錯,因為邏輯沖突了 ``` >db.students.find({},{name:1,age:0}); ``` 除了1、0,也可以進行一般的查詢篩選 #### 條件查找 ##### $in 離散查找 ``` db.students.find({age:[$in:[20,70]]}); ``` ##### $nin $in取反 ``` db.students.find({age:[$nin:[20,70]]}); ``` ##### $not 非 ``` db.students.find(age:{$not:{$in:[20,70]}}); ``` ##### $gt和$lt - $gt :大于 - $gte :大于等于 - $lt:小于 - $lte:小于等于 ``` db.students.find({age:{$gte:20,$lte:70}}); ``` ``` db.students.find({age:{$not:{$gte:20,$lte:70}}});; ``` ##### 完全匹配 ``` db.students.find({hobby:["1","2","3"]}) ``` ##### 關于值為數組的情況 且 ``` db.students.find({hobby:{$all:['smoking','drinking']}}) ``` $in 和 數組 -> 離散 ``` db.students.find({hobby:{$in:['smoking','drinking']}}) ``` $size ``` db.students.find({hobby:{$size:3}}) //有三個hobby的 ``` $where ``` db.students.find($where:"this.age>30&&this.age<100") ``` $slice 若想要hobby這種數據(數組形式的值),只顯示其中的幾項,需要用到`$slice`截取(注意這個操作并不是篩選而只是決定是否顯示) ``` //$slice:2 就是0、1 //$slice:-2 就是倒數最后一個和倒數第二個 db.students.find({hobby:{$size:3},{hobby:{$slice:2},_id:false}) ``` ##### 依據id查找 ``` {_id:ObjectId("...")} ``` ##### 正則查找`//`or`$regex` ``` {name:/.../} {name:{$regex:"..."}} ``` ##### 與和或 且 ``` db.students.find({name:'ahhh',age:999}); ``` or ``` db.students.find($or:[{name:'ahhh'},{age:999}]); ``` 且或連用 名字是ahhh,年齡是20或則100 ``` db.students.find({name:'ahhh',$or:[{age:20},{age:100}]}); ``` ##### $exists 將沒有age字段的數據查出 ``` db.students.find({age:{$exists:false}}); ``` #### cursor ``` var db = connect('students'); //返回的是一個游標,指向結果集的一個指針 var cursor = db.students.find(); while(cursor.hasNext()){ var record = cursor.next(); printjson(record); } ``` 或則 ``` var db = connect('students'); cursor.forEach(function(item){ printjson(item); }); ``` #### 分頁查詢 跳過前三條取三條 ``` db.students.find().skip(3).limit(3); ``` ``` var pagesize = 3; var pagenumber = 2; db.students.find().skip(pagenumber-1)*pagesize).limit(pagesize).sort(1) ``` 每個`()`方法不論順序 ## mongoose查詢 ### 查詢不到時的結果 為`[]`數組,這貨在判斷里不等于false ### 基礎查詢 >語法 >Model.find(查詢條件,callback); ``` Model.find({},function(error,docs){ //若沒有向find傳遞參數,默認的是顯示所有文檔 }); Model.find({ "age": 111 }, function (error, docs) { if(error){ console.log("error :" + error); }else{ console.log(docs); //docs: age為111的所有文檔 } }); ``` #### 屬性過濾 >語法 >find(Conditions,field,callback) ``` //field省略或為Null,則返回所有屬性。 //返回只包含name、age兩個鍵的所有記錄 Model.find({},{name:1, age:1, _id:0},function(err,docs){ //docs 查詢結果集 }) ``` 我們只需要把顯示的屬性設置為大于零的數就可以,當然1是最好理解的,_id是默認返回,如果不要顯示加上`("_id":0)` #### findOne(查詢單條) >語法 >findOne(Conditions,callback) find相同,但只返回單個文檔,也就說當查詢到即一個符合條件的數據時,將停止繼續查詢,并返回查詢結果 語法 ``` TestModel.findOne({ age: 111}, function (err, doc){ // 查詢符合age等于6的第一條數據 // doc是查詢結果 }); ``` #### findById(按ID單條數據) >語法 >findById(_id, callback) 與findOne相同,但它只接收文檔的_id作為參數,返回單個文檔 語法 與原生不同的是,原生需要使用`ObjectId()` ``` PersonModel.findById(person._id, function (err, doc){ //doc 查詢結果文檔 }); ``` #### $gt、$lt(大于、小于) 查詢時我們經常會碰到要根據某些字段進行條件篩選查詢,比如說Number類型,怎么辦呢,我們就可以使用$gt(>)、$lt(<)、$lte(<=)、$gte(>=)操作符進行排除性的查詢,如下示例: ``` Model.find({"age":{"$gt":6}},function(error,docs){ //查詢所有nage大于6的數據 }); Model.find({"age":{"$lt":6}},function(error,docs){ //查詢所有nage小于6的數據 }); Model.find({"age":{"$gt":6,"$lt":9}},function(error,docs){ //查詢所有nage大于6小于9的數據 }); ``` #### $ne(不等于) $ne(!=)操作符的含義相當于不等于、不包含,查詢時我們可通過它進行條件判定,具體使用方法如下: ``` Model.find({ age:{ $ne:6}},function(error,docs){ //查詢age不等于6的所有數據 }); ``` #### $in(包含) 和$ne操作符相反,$in相當于包含、等于,查詢時查找包含于指定字段條件的數據 ``` Model.find({ age:{ $in: 6}},function(error,docs){ //查詢age等于6的所有數據 }); Model.find({ age:{$in:[6,7]}},function(error,docs){ //可以把多個值組織成一個數組 }); ``` #### $or(或者) 可以查詢多個鍵值的任意給定值,只要滿足其中一個就可返回,用于存在多個條件判定的情況下使用,如下示例: ``` Model.find({"$or":[{"name":"zfpx"},{"age":6}]},function(error,docs){ //查詢name為zfpx或age為6的全部文檔 }); ``` #### $exists(是否存在) $exists操作符,可用于判斷某些關鍵字段是否存在來進行條件查詢。如下示例: ``` Model.find({name: {$exists: true}},function(error,docs){ //查詢所有存在name屬性的文檔 }); Model.find({email: {$exists: false}},function(error,docs){ //查詢所有不存在email屬性的文檔 }); ``` ### 高級查詢 可以限制結果的數量,跳過部分結果,根據任意鍵對結果進行各種排序 所有這些選項都要在查詢被發送到服務器之前指定 #### limit(限制數量) >語法 >find(Conditions,fields,options,callback); 在查詢操作中,有時數據量會很大,這時我們就需要對返回結果的數量進行限制 那么我們就可以使用limit函數,通過它來限制結果數量。 語法 ``` Model.find({},null,{limit:20},function(err,docs){ console.log(docs); }); ``` 如果匹配的結果不到20個,則返回匹配數量的結果,也就是說limit函數指定的是上限而非下限 #### skip(跳過/略過的數量) >語法 >find(Conditions,fields,options,callback); skip函數的功能是略過指定數量的匹配結果,返回余下的查詢結果 如下示例: ``` Model.find({},null,{skip:4},function(err,docs){ console.log(docs); }); ``` 如果查詢結果數量中少于4個的話,則不會返回任何結果。 #### sort函數 >語法 >find(Conditions,fields,options,callback) sort函數可以將查詢結果數據進行排序操作 該函數的參數是一個或多個鍵/值對 鍵代表要排序的鍵名,值代表排序的方向,1是升序,-1是降序 語法 ``` Model.find({},null,{sort:{age:-1}},function(err,docs){ //查詢所有數據,并按照age降序順序返回數據docs }); ``` sort函數可根據用戶自定義條件有選擇性的來進行排序顯示數據結果。 #### 分頁查詢 ``` Model('User').find({}) .sort({createAt:-1}) .skip((pageNum-1)*pageSize) .limit(pageSize) .populate('user') .exec(function(err,docs){ console.log(docs); }); ``` #### populate 連表查詢 ``` var mongoose = require('mongoose'); //連接數據庫 mongoose.connect('mongodb://localhost:27017/201606blog'); //定義課程Schema var CourseSchema = new mongoose.Schema({ name:String }); var CourseModel = mongoose.model('Course',CourseSchema); var PersonSchema = new mongoose.Schema({ name:{ type:String, required:true }, // 外鍵 別的集合的主鍵 course:{ type:mongoose.Schema.Types.ObjectId, ref:'Course' //指明此外鍵是哪個集合中的外鍵 } }); var PersonModel = mongoose.model('Person',PersonSchema); CourseModel.create({name:'node.js'},function(err,course){ PersonModel.create({name:'ahhh',course:course._id},function(err,doc){ console.log(doc); PersonModel.findById(doc._id).populate('course').exec(function(err,doc){ console.log(doc); //連表查詢后的結果 }) }) }); ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看