最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MongoDB進(jìn)階之動(dòng)態(tài)字段設(shè)計(jì)詳解

 更新時(shí)間:2017年06月17日 09:29:34   作者:RavenZZ  
這篇文章主要給大家介紹了MongoDB進(jìn)階之動(dòng)態(tài)字段設(shè)計(jì)的相關(guān)資料,文中介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面跟著小編一起來學(xué)習(xí)學(xué)習(xí)吧。

本文主要介紹的是關(guān)于MongoDB動(dòng)態(tài)字段設(shè)計(jì)的相關(guān)資料,分享出來供大家參考學(xué)習(xí),需要的朋友們下面來一起看看詳細(xì)的介紹吧。

適宜讀者人群

  • MongoDB開發(fā)者

基礎(chǔ)需求

產(chǎn)品: "我們要為現(xiàn)有的表單增加一個(gè)偉大的功能, 允許用戶增加想要的字段"

技術(shù)目標(biāo)version 1

存儲(chǔ)動(dòng)態(tài)表單數(shù)據(jù)(新增字段無需修改Schema)

首先講一講MongoDB支持的索引有哪幾種

普通字段索引

// 假如我們的文檔長(zhǎng)這樣
{
 "name": "MongoDB",
 "age": 5
}

// 對(duì)age字段建立索引
{
 "age": 1
}

內(nèi)嵌文檔索引

// 假如我們的文檔長(zhǎng)成了Object
{
 "person": {
  "age": 2,
  "name": "MongoDB"
 }
}

//對(duì)person.age字段建立索引
{
 "person.age": 1
}

數(shù)組文檔索引

// 假如我們的文檔長(zhǎng)成了數(shù)組
{
 "persons": [
  { "name": "MongoDB", age: 5},
  { "name": "MySQL", age: 20}
 ]
}
//對(duì)persons.age字段建立索引
{
 "persons.age": 1
}

看似上面只有都無法做到動(dòng)態(tài)增加字段的功能

程序員A和程序員S發(fā)生如下對(duì)話:

  • 程序猿A: "那么我們需要增加另外一個(gè)collection來存儲(chǔ)動(dòng)態(tài)的內(nèi)容"
  • 程序猿S: "但MongoDB對(duì)關(guān)聯(lián)查詢的支持很弱啊, 都沒法關(guān)聯(lián)排序, 要是后面產(chǎn)品說要加 排序篩選 的功能我們就懵逼了呀☹️ , 唉~ 早知如此就不用MongoDB了"

再重新審視需求

  • 存儲(chǔ)動(dòng)態(tài)表單數(shù)據(jù)
  • 需要支持篩選和排序

技術(shù)目標(biāo)version2

增加字段同時(shí)還要可以索引

解決方案

  • 使用數(shù)組來存儲(chǔ)動(dòng)態(tài)字段
  • 增加描述collection用來記錄用戶的表單配置

存儲(chǔ)結(jié)構(gòu)如下:

//描述collection 
{
 "_id":"描述id",
 "type":"類型",
 "text": "訂單名稱",
 "default": "Default Name",
}

// 原本的表單增加字段form用來存儲(chǔ)動(dòng)態(tài)數(shù)據(jù)
{
 "_id": "",
 "name": "一個(gè)好名字",
 "form":[
 { "_id":"描述_id", "value": 10},
 { "_id":"描述_id", "value": "我的好伙伴"},
 ]
}

注意!!! 當(dāng)用戶增加n個(gè)字段時(shí), 描述collection同時(shí)增加n個(gè)文檔

如何查詢排序篩選呢

// 比如用戶增加了2個(gè)字段
// 現(xiàn)在要對(duì)字段1進(jìn)行排序
db.items.find().sort({"form.0.value":1})
// 對(duì)字段2進(jìn)行篩選
db.items.find({"form.1.value":"我的好伙伴"})

上面的例子可以看出, 即使用戶未填寫該字段值, 但我們依舊需要為它進(jìn)行存儲(chǔ)空值, 以保證我們所有的Document的form下第n個(gè)字段均為同一個(gè)控件, 這樣我們就可以對(duì)字段進(jìn)行篩選排序, 并且可索引

繼續(xù)深入

產(chǎn)品: "我們需要允許用戶增加下拉框和多選框, 同樣需要篩選排序"

程序猿: "Fxxx"

那么這樣的數(shù)據(jù)應(yīng)該如何存儲(chǔ)呢?

解決方案如下:

我們的value按照1,2,4,8...的二進(jìn)制方式進(jìn)行存儲(chǔ)


用戶選擇單選框第一項(xiàng), 則存1, 第二項(xiàng)則存2, 第三項(xiàng)則存4

用戶選擇多選框第一項(xiàng)+第三項(xiàng):則存5, (1+4)

MongoDB為我們提供了強(qiáng)大的Aggregate功能, 其中包含了Bitwise Query Operators 功能, 包含$bitsAllSet ,$bitsAnySet , $bitsAllClear , $bitsAnyClear

db.items.aggregate([
 {
  "$match": {
  "$elemMatch": {
   "描述id": "id",
   "value": { $bitsAnySet: [ 1, 5 ] }
  }
 }}
])

以上完成了使用MongoDB動(dòng)態(tài)字段設(shè)計(jì)的各種需求 😊

總結(jié)

  • 增加配置collection, 用來描述用戶的配置
  • 原始值需要存儲(chǔ)空值
  • 如需類似下拉框, 多選框時(shí), 使用Bitwise Query Operators 來完成
  • MongoDB并沒有那么弱, 也是可以滿足復(fù)雜的數(shù)據(jù)需求的

好了,以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

  • windows下安裝mongodb以及node.js連接mongodb實(shí)例

    windows下安裝mongodb以及node.js連接mongodb實(shí)例

    本篇文章主要介紹了windows下安裝mongodb以及node.js連接mongodb實(shí)例,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2017-05-05
  • MongoDB教程之入門基礎(chǔ)知識(shí)

    MongoDB教程之入門基礎(chǔ)知識(shí)

    這篇文章主要介紹了MongoDB教程之入門基礎(chǔ)知識(shí),本文講解了文檔的注意事項(xiàng)、使用多個(gè)集合的必要性、集合的命名注意事項(xiàng)、數(shù)據(jù)庫(kù)、MongoDB的啟動(dòng)、Shell的使用小技巧等內(nèi)容,需要的朋友可以參考下
    2015-05-05
  • mongodb與sql關(guān)系型數(shù)據(jù)比較

    mongodb與sql關(guān)系型數(shù)據(jù)比較

    今天小編就為大家分享一篇關(guān)于mongodb與sql關(guān)系型數(shù)據(jù)比較,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • MongoDB聚合功能淺析

    MongoDB聚合功能淺析

    這篇文章主要介紹了MongoDB聚合功能,需要的朋友可以參考下
    2014-07-07
  • MongoDB安裝使用并實(shí)現(xiàn)Python操作數(shù)據(jù)庫(kù)

    MongoDB安裝使用并實(shí)現(xiàn)Python操作數(shù)據(jù)庫(kù)

    Mongo最大的特點(diǎn)是他支持的查詢語(yǔ)言非常強(qiáng)大,其語(yǔ)法有點(diǎn)類似于面向?qū)ο蟮牟樵冋Z(yǔ)言,幾乎可以實(shí)現(xiàn)類似關(guān)系數(shù)據(jù)庫(kù)單表查詢的絕大部分功能,而且還支持對(duì)數(shù)據(jù)建立索引。本文就詳細(xì)的介紹一下如何使用,感興趣的可以了解一下
    2021-06-06
  • MongoDB查詢之高級(jí)操作詳解(多條件查詢、正則匹配查詢等)

    MongoDB查詢之高級(jí)操作詳解(多條件查詢、正則匹配查詢等)

    這篇文章主要給大家介紹了關(guān)于MongoDB查詢之高級(jí)操作(多條件查詢、正則匹配查詢等)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • MongoDB備份、還原、導(dǎo)出、導(dǎo)入、克隆操作示例

    MongoDB備份、還原、導(dǎo)出、導(dǎo)入、克隆操作示例

    這篇文章主要介紹了MongoDB備份、還原、導(dǎo)出、導(dǎo)入、克隆操作示例,本文分別給操作代碼、命令實(shí)例,需要的朋友可以參考下
    2015-07-07
  • MongoDB中查詢(find操作符)詳細(xì)指南

    MongoDB中查詢(find操作符)詳細(xì)指南

    MongoDB是領(lǐng)先的NoSQL數(shù)據(jù)庫(kù)之一,以其快速的性能,靈活的模式,可伸縮性和強(qiáng)大的索引功能而聞名,下面這篇文章主要給大家介紹了關(guān)于MongoDB中查詢(find操作符)的相關(guān)資料,需要的朋友可以參考下
    2023-04-04
  • MongoDB快速入門筆記(三)之MongoDB插入文檔操作

    MongoDB快速入門筆記(三)之MongoDB插入文檔操作

    這篇文章主要介紹了MongoDB快速入門筆記(三)之MongoDB插入文檔操作 的相關(guān)資料,非常不錯(cuò)具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-06-06
  • MongoDB的備份與恢復(fù)

    MongoDB的備份與恢復(fù)

    這篇文章主要介紹了MongoDB的備份與恢復(fù),幫助大家更好的理解和學(xué)習(xí)使用MongoDB,感興趣的朋友可以了解下
    2021-03-03

最新評(píng)論

晋宁县| 呼图壁县| 深州市| 太和县| 汾阳市| 包头市| 铁岭市| 西安市| 东乡族自治县| 墨脱县| 泾阳县| 寻乌县| 霍林郭勒市| 彭州市| 闻喜县| 开原市| 保德县| 渭南市| 德令哈市| 三原县| 兴国县| 句容市| 六枝特区| 洛南县| 黄冈市| 高尔夫| 华阴市| 肇州县| 洞口县| 固阳县| 桓台县| 万荣县| 黔南| 安义县| 南京市| 恩施市| 西乌珠穆沁旗| 同江市| 洞口县| 桂林市| 舟曲县|