快遞物流系統裡最常見的一種業務類型就是訂單的查詢和記錄。訂單的特點是随着遞送過程,訂單資料需要随時更新路徑。資料結構上需要可以靈活應對,這點非常符合document模型,并且mongodb支援gis功能,非常适用于mongodb來支撐物流業務。并且mongodb具備sharding能力,而物流行業裡訂單比較獨立,誇訂單的操作很少,而對單訂單來說,更新追加的操作會較多,比如再物流中轉處理上。是以物流業務模型上與mongodb非常的比對。以下講解一個虛拟的demo,可供參考,用到的特性:
mongodb document的數組結構
ttl索引,自動過期曆史資料
複合索引,多條件查詢索引
partial indexes,條件索引,隻索引有效資料,降低索引的占用空間
mongodb gis功能,支援geojson标準,可以接入第三方系統處理geo資訊。
<a href="https://mongodb.console.aliyun.com/#/buy/mongodb">了解阿裡雲mongodb詳細配置及價格</a>

例如:
幾個注意點:
利用了geo特性,使用geojson标準,但是坐标系上需要注意坐标标準問題;
時間處理上,物流行業會涉及到國際化,是以嚴格按照iso的标準,定義時間,cn<code>+80:00</code>;
訂單詳情裡很好的利用了document的數組特性;
快遞訂單是唯一的,可以作為mongodb的主鍵;
insert到collection中後的文檔:
物流快遞的訂單修改主要是查詢和資訊追加兩種,主要介紹這兩種:
訂單資訊查詢,最常見的操作,使用者的訂單查詢:
有時需要做資訊統計,按照狀态來查詢:
物流狀态更新時,需要更新相應的訂單,mongodb上直接<code>$push</code>過去即可:
<code>_id</code>索引,預設存在,不需要再建立;當資料量較大時,可以使用sharding結構,shardkey的選擇上可以使用<code>hash(_id)</code>。
ttl索引,字段<code>create_date</code>,180天後自動清理資料:
位置和狀态索引,為了能快速處理“某地未處理訂單”查詢,這是一個多條件的查詢,是以是一個複合索引,<code>status</code>字段放在前面,因為多數的查詢都會依賴狀态字段
在這個demo裡,還有一種加快查詢速度的方法就是,建立一個隻包含指定狀态的一個partial indexes索引。比如<code>status</code>必須為<code>delivering </code>才加入到索引中,有效控制索引的大小,加快查詢速度。
mongodb遵循的事geojson規範,對象的描述上通過一個type字段描述geojson類型,coordinates字段描述空間資訊。
{ type: "<geojson type>" , coordinates: <coordinates> }
coordinates是一個<code>[longitude, latitude]</code>的數組類型。另外值得關注的是mongodb geo的使用的是wgs84标準。wgs84也是國際标準,中國使用的著名的火星坐标gcj-02,還有一套百度坐标bd09,三者的坐标轉換可以參考附錄相關的連結。
geojson
<a href="https://docs.mongodb.com/manual/reference/geojson/">https://docs.mongodb.com/manual/reference/geojson/</a>
<a href="http://geojson.org/geojson-spec.html">http://geojson.org/geojson-spec.html</a>
<a href="https://docs.mongodb.com/manual/reference/glossary/#term-wgs84">https://docs.mongodb.com/manual/reference/glossary/#term-wgs84</a>
mongodb geo index
<a href="https://docs.mongodb.com/manual/core/2dsphere/">https://docs.mongodb.com/manual/core/2dsphere/</a>
<a href="https://docs.mongodb.com/manual/reference/glossary/#term-legacy-coordinate-pairs">https://docs.mongodb.com/manual/reference/glossary/#term-legacy-coordinate-pairs</a>
geohack
geo datum
<a href="https://github.com/wandergis/coordtransform">https://github.com/wandergis/coordtransform</a>
葉翔,apsaradb for mongodb 開發組