摘要:但查詢出來的寫過卻并不是預(yù)想的為的文檔排在前面,結(jié)果正好相反。由于平常用比較多所以在查詢時自然想到但是并不能按照數(shù)字來排序字符串字段值,上面的集合中如果通過排序字符串值來得到想要的結(jié)果需要在個位數(shù)字前面補(bǔ)這樣才能返回想要的排序結(jié)果。
最近在開發(fā)中遇到一個mongo查詢排序的問題,項目中一些高頻訪問的熱數(shù)據(jù)是放在mongoDB里的,mongo支持很多像SQL一樣的操作比如sort就對應(yīng)于SQL的order by.
比方我們有一個集合來存放一些書籍信息,集合中有下面這些文檔
{ "_id" : "28041", "title" : "Mysql入門", "subtitle" : "", "author" : "John Joe", "cate_id" : "223", "list_order" : "10", } ...... { "_id" : "28847", "title" : "Node即學(xué)即用", "subtitle" : "", "author" : "Mike Wilson", "cate_id" : "223", "list_order" : "6", }
上面集合中的list_order字段是用來控制書籍信息在列表中的現(xiàn)實順序的,比方要查詢cate_id 223下的所有書籍,并且把查詢結(jié)果按list_order降序排列。
db.book.find({"cate_id" : "223"}).sort({"list_order" : -1});
但查詢出來的寫過卻并不是預(yù)想的list_order為10的文檔排在前面,結(jié)果正好相反。原因就是上面的集合中l(wèi)ist_order的字段值都是字符串。
由于平常用Mysql比較多所以在查詢時自然想到ORDER BY list_order DESC, 但是MongoDB并不能按照數(shù)字來排序字符串字段值,上面的集合中如果通過排序字符串值來得到想要的結(jié)果需要在個位數(shù)字前面補(bǔ)“0” 01,02,03,04,05,06,07,08,09,10,11 這樣才能返回想要的排序結(jié)果。
另外也可以將list_order的值存儲為整數(shù)類型
{ "_id" : "28847", "title" : "Node即學(xué)即用", "subtitle" : "", "author" : "Mike Wilson", "cate_id" : "223", "list_order" : NumberLong(6), }
同樣能得到倒序排列結(jié)果。
推薦采用第二種存儲整型數(shù)值的方法,另外需要注意一些數(shù)據(jù)是從Mysql查出然后放到Mongo里去的,Mysql中存儲的int字段值查詢到程序里會變成數(shù)字字符串即 6 ==> "6" 所以才有了上面list_order值為"6"的情況, 所以如果需要保存為整型的數(shù)據(jù),在save前都要用(int)來進(jìn)行類型轉(zhuǎn)換。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/18771.html
摘要:類型數(shù)字別名注意已過時布爾日期正則表達(dá)式位整數(shù)時間戳位整數(shù)要確定字段的類型,請查看在中檢驗類型。是位整數(shù),代表自紀(jì)元年月日以來的毫秒數(shù)。 BSON是一個用來存儲文檔的二進(jìn)制序列化格式,并且可以在MongoDB中遠(yuǎn)程調(diào)用。該BSON規(guī)范位于bsonspce.org。 BSON在文檔中支持下列數(shù)據(jù)類型作為值。每個數(shù)據(jù)類型都有相對應(yīng)的數(shù)字和字符串別名用 $type 操作執(zhí)行BSON類型來查詢...
摘要:刪除符合值為的第一條數(shù)據(jù)刪除符合值為的所有數(shù)據(jù)值得一提的是,刪除操作并不會改變的索引設(shè)置,即便刪除了這個下的所有文檔。因此這類批量執(zhí)行指令是非原子性的。官方推薦使用前者。在設(shè)計數(shù)據(jù)模型時,要考慮根據(jù)不同情況選擇適合的文檔結(jié)構(gòu)進(jìn)行設(shè)計。 1. 基礎(chǔ)概念 1.1 database 數(shù)據(jù)庫,一個數(shù)據(jù)倉庫可以包含多個集合 1.2 collection 集合,類似于關(guān)系數(shù)據(jù)庫中的表。一個集合可以...
摘要:刪除符合值為的第一條數(shù)據(jù)刪除符合值為的所有數(shù)據(jù)值得一提的是,刪除操作并不會改變的索引設(shè)置,即便刪除了這個下的所有文檔。因此這類批量執(zhí)行指令是非原子性的。官方推薦使用前者。在設(shè)計數(shù)據(jù)模型時,要考慮根據(jù)不同情況選擇適合的文檔結(jié)構(gòu)進(jìn)行設(shè)計。 1. 基礎(chǔ)概念 1.1 database 數(shù)據(jù)庫,一個數(shù)據(jù)倉庫可以包含多個集合 1.2 collection 集合,類似于關(guān)系數(shù)據(jù)庫中的表。一個集合可以...
摘要:是在環(huán)境下對進(jìn)行便捷操作的對象模型工具因此,要使用,則必須安裝環(huán)境以及數(shù)據(jù)庫。使操作更簡單便捷。找到記錄,并且將遞增,返回后的為之前的。這個屬性很有用,對數(shù)字直接進(jìn)行增減。,要返回的字段與的第二個參數(shù)一致。 Mongoose是在node.js環(huán)境下對mongodb進(jìn)行便捷操作的對象模型工具 因此,要使用mongoose,則必須安裝node.js環(huán)境以及mongodb數(shù)據(jù)庫。mongoo...
摘要:用于存儲布爾值真假。將一個值與二進(jìn)制的元素的最低值和最高值相對比。可選,拋出異常的級別。在建立唯一索引時是否刪除重復(fù)記錄指定創(chuàng)建唯一索引。索引權(quán)重值,數(shù)值在到之間,表示該索引相對于其他索引字段的得分權(quán)重。 Robo 3T -< 可視化工具 http://blog.csdn.net/i_vic/ar... [Unit] Description=mongodb After=networ...
閱讀 3339·2022-01-04 14:20
閱讀 3107·2021-09-22 15:08
閱讀 2188·2021-09-03 10:44
閱讀 2315·2019-08-30 15:44
閱讀 1490·2019-08-29 18:40
閱讀 2654·2019-08-29 17:09
閱讀 2988·2019-08-26 13:53
閱讀 3220·2019-08-26 13:37