您好,登錄后才能下訂單哦!
一,方法介紹
1,聚合操作之count
count()方法可以查詢統(tǒng)計(jì)符合條件的集合的總數(shù)
1 db.User.count(<query>) // 此方法等價(jià)于 db.User.find(<query>).count()
在分布式集合中,會(huì)出現(xiàn)計(jì)算錯(cuò)誤的情況,這個(gè)時(shí)候推薦使用aggregate;
2,find() 方法以非結(jié)構(gòu)化的方式來(lái)顯示所有文檔。
1 db.User.find();//相當(dāng)于:select* from User;
3,exec() 方法用于檢索字符串中的正則表達(dá)式的匹配。(javascript方法)
4,sort() 方法對(duì)數(shù)據(jù)進(jìn)行排序,sort() 方法可以通過(guò)參數(shù)指定排序的字段,并使用 1 和 -1 來(lái)指定排序的方式,其中 1 為升序排列,而 -1 是用于降序排列。
1 升序:db.User.find().sort({CreateTime: 1}); 2 降序:db.User.find().sort({CreateTime: -1});
5,skip()方法來(lái)跳過(guò)指定數(shù)量的數(shù)據(jù),skip方法同樣接受一個(gè)數(shù)字參數(shù)作為跳過(guò)的記錄條數(shù)。
1 db.User.find().skip(2)//跳過(guò)2條
6,limit()方法接受一個(gè)數(shù)字參數(shù),該參數(shù)指定從MongoDB中讀取的記錄條數(shù)。一般與skip連用
1 # limit()中number值為空時(shí)代表全部查出 2 db.User.find().limit(2) #讀取的條數(shù)
1 # 常用在分頁(yè)方法中 2 # 查詢User集合中,跳過(guò)前兩條記錄,每頁(yè)一條記錄 3 > db.User.find().skip(2).limit(1)
二,封裝與接口拋出
2.1,分頁(yè)查詢
1,根據(jù)查詢條件獲取總條數(shù),使用count({},callback)方法
/** * 根據(jù)條件獲取有多少條數(shù)據(jù) 文檔數(shù) * @param table_name 表名 * @param conditions 查詢條件 {a:1, b:2} * @param callback 回調(diào)方法 */ MongoDbAction.getTotal = function (table_name, conditions, callback) { var node_model = this.getConnection(table_name); if (!node_model || node_model.message) { if (callback) callback(1, node_model) } else { node_model.find(conditions) .count({}) .exec(function (err, total) { if (err) { if (callback) callback(err); } else { if (callback) callback(null, total); } }); } };
2,實(shí)現(xiàn)連寫查詢
(1)這個(gè)可以用來(lái)做分頁(yè),表示獲取從第1條(第1條記錄序號(hào)為0)記錄開始的10條記錄.類似與Mysql的limit 0, 10,如下:
{ limit:10,//pageSize skip:0//page:skip+1 }
(2)按某個(gè)字段升序(1)降序(-1),如下 按照創(chuàng)建時(shí)間進(jìn)行降序排列
sort: {CreateTime: -1},
(3)代碼連寫查詢實(shí)現(xiàn):
/** * 連寫查詢 查詢多條數(shù)據(jù) * @param table_name 表名 * @param conditions 查詢條件 {a:1, b:2} * @param options 選項(xiàng):{fields: "a b c", sort: {time: -1}, limit: 10} * @param callback 回調(diào)方法 */ MongoDbAction.whereCondition = function (table_name, conditions, options, callback) { var node_model = this.getConnection(table_name); if (!node_model || node_model.message) { if (callback) callback(1, node_model) } else { node_model.find(conditions) .select(options.fields || '') .sort(options.sort || {})//排序 //按某個(gè)字段升序(1)降序(-1) .skip(options.skip || 0)//跳過(guò)的條數(shù) .limit(options.limit || {})//查詢幾條 .exec(function (err, res) { if (err) { if (callback) callback(err); } else { if (callback) callback(null, res); } }); } };
3,根據(jù)所傳的參數(shù)實(shí)現(xiàn)分頁(yè)查詢
拋出分頁(yè)查詢的接口
//連寫查詢數(shù)據(jù) 包括分頁(yè) 獲取總條數(shù) router.put('/user/getSingleAndManyData', function (req, res) { var tableName = req.body.tableName;//'User' var IsEnable = req.body.IsEnable; var limit = req.body.pageSize; var sort = req.body.sort; var skip = req.body.page; let conditions = { IsEnable } let options = { sort: {CreateTime: sort},//排序 limit,//pageSize skip:(limit*(skip-1))//page } // let options = { // sort: {CreateTime: -1},//按某個(gè)字段升序(1)降序(-1) // limit:10, // skip:(limit*(skip-1))//skip=1=> skip:0 // } // 這個(gè)可以用來(lái)做分頁(yè),表示獲取從第1條(第1條記錄序號(hào)為0)記錄開始的10條記錄.類似與Mysql的limit 0, 10 let data = { httpCode: 200, message: "查詢成功!", status: 1, data: null, page:skip, pageSize:limit } MongoDbAction.getTotal(tableName,conditions, function (err, total) { if (err) { data.total=0 data.status = 0 data.message = "未查詢到數(shù)據(jù)!" data.data = null res.status(data.httpCode).json(data); } else { MongoDbAction.whereCondition(tableName,conditions,options, function (err, result) { if (!err) { data.total=total data.data = result res.status(data.httpCode).json(data); } else { data.total=0 data.status = 0 data.message = "未查詢到數(shù)據(jù)!" data.data = result res.status(data.httpCode).json(data); } }); } }); })
4,接口調(diào)用,返回的結(jié)果集如下:
三,常見問(wèn)題
1,連接警告
警告:(node:204) DeprecationWarning: current URL string parser is deprecated, and will be removed in a future version. To use the new parser, pass option { useNewUrlParser: true } to MongoClient.connect.
1 mongoose.connect(dbURL);// 連接數(shù)據(jù)庫(kù) 存在警告
解決辦法:連接配置添加: { useNewUrlParser: true }
1 mongoose.connect(dbURL,{useNewUrlParser:true});//連接數(shù)據(jù)庫(kù)
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)億速云的支持。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。