本文為NoSQL數(shù)據(jù)模型設(shè)計(jì)系列的一部分凌彬。
此模式每個(gè)節(jié)點(diǎn)是一個(gè)文檔,并且節(jié)點(diǎn)保存祖先節(jié)點(diǎn)的路徑字符串。盡管此模式需要處理字符串和正則表達(dá)式等額外工作神得,但它可以提供更大的靈活性比如按照部分路徑查詢栈顷。
以下面分類層級為例
創(chuàng)建文檔
db.categories.insertMany( [
{ _id: "Books", path: null },
{ _id: "Programming", path: ",Books," },
{ _id: "Databases", path: ",Books,Programming," },
{ _id: "Languages", path: ",Books,Programming," },
{ _id: "MongoDB", path: ",Books,Programming,Databases," },
{ _id: "dbm", path: ",Books,Programming,Databases," }
] )
按照路徑排序獲得整棵樹
db.categories.find().sort( { path: 1 } )
采用正則表達(dá)式獲得指定節(jié)點(diǎn)的子孫
db.categories.find( { path: /,Programming,/ } )
在path字段上創(chuàng)建索引
db.categories.createIndex( { path: 1 } )
如果查詢提供從根節(jié)點(diǎn)開始的路徑例如/^,Books,/ 或/^,Books,Programming,/,此索引能夠快速匹配結(jié)果余黎。
如果查詢提供中間路徑,需要掃描整個(gè)索引返回結(jié)果载萌。但如果索引比collection小很多驯耻,還是能提高性能亲族。
完整內(nèi)容請查看NoSQL數(shù)據(jù)模型設(shè)計(jì)系列