好湿?好紧?好多水好爽自慰,久久久噜久噜久久综合,成人做爰A片免费看黄冈,机机对机机30分钟无遮挡

主頁 > 知識庫 > MongoDB進階之動態字段設計詳解

MongoDB進階之動態字段設計詳解

熱門標簽:怎么投訴地圖標注 電銷機器人是什么軟件 濟南電銷機器人加盟公司 杭州人工電銷機器人價格 蘋果汽車租賃店地圖標注 廣州長安公司怎樣申請400電話 呼和浩特電銷外呼系統加盟 云南外呼系統 老虎洗衣店地圖標注

本文主要介紹的是關于MongoDB動態字段設計的相關資料,分享出來供大家參考學習,需要的朋友們下面來一起看看詳細的介紹吧。

適宜讀者人群

  • MongoDB開發者

基礎需求

產品: "我們要為現有的表單增加一個偉大的功能, 允許用戶增加想要的字段"

技術目標version 1

存儲動態表單數據(新增字段無需修改Schema)

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

普通字段索引

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

// 對age字段建立索引
{
 "age": 1
}

內嵌文檔索引

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

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

數組文檔索引

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

看似上面只有都無法做到動態增加字段的功能

程序員A和程序員S發生如下對話:

  • 程序猿A: "那么我們需要增加另外一個collection來存儲動態的內容"
  • 程序猿S: "但MongoDB對關聯查詢的支持很弱啊, 都沒法關聯排序, 要是后面產品說要加 排序篩選 的功能我們就懵逼了呀☹️ , 唉~ 早知如此就不用MongoDB了"

再重新審視需求

  • 存儲動態表單數據
  • 需要支持篩選和排序

技術目標version2

增加字段同時還要可以索引

解決方案

  • 使用數組來存儲動態字段
  • 增加描述collection用來記錄用戶的表單配置

存儲結構如下:

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

// 原本的表單增加字段form用來存儲動態數據
{
 "_id": "",
 "name": "一個好名字",
 "form":[
 { "_id":"描述_id", "value": 10},
 { "_id":"描述_id", "value": "我的好伙伴"},
 ]
}

注意!!! 當用戶增加n個字段時, 描述collection同時增加n個文檔

如何查詢排序篩選呢

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

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

繼續深入

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

程序猿: "Fxxx"

那么這樣的數據應該如何存儲呢?

解決方案如下:

我們的value按照1,2,4,8...的二進制方式進行存儲


用戶選擇單選框第一項, 則存1, 第二項則存2, 第三項則存4

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

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

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

以上完成了使用MongoDB動態字段設計的各種需求 😊

總結

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

好了,以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

您可能感興趣的文章:
  • MySQL和MongoDB設計實例對比分析
  • MongoDB 數據庫的命名、設計規范詳解
  • windows7下使用MongoDB實現倉儲設計
  • MongoDB實現問卷/考試設計功能
  • MongoDB設計方法以及技巧示例詳解

標簽:興安盟 無錫 雞西 玉林 遼陽 泰安 自貢 廈門

巨人網絡通訊聲明:本文標題《MongoDB進階之動態字段設計詳解》,本文關鍵詞  MongoDB,進階,之,動態,字段,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《MongoDB進階之動態字段設計詳解》相關的同類信息!
  • 本頁收集關于MongoDB進階之動態字段設計詳解的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 乖转过去趴好腿打开挨打| 久久er国产精品免费观看1 | jijzzizz18女学生| 日本熟人妻人伦A片悠田优| www.99热.com| 性感的邻居| 小荡货你夹得我又紧又爽动态图| 久久久精品中文字幕无码| 在线看www| 使劲灬把麻麻弄爽了在线观看| 柔软的肉体波多野结衣| 97夜色爽爽影院在线观看| 绝色侠女被强迫花苞| 新金瓶梅2| 老女人逼逼| 狼人香蕉毛片AV国产专区| 少萝扒开腿秘?让人桶| 国产爽片在线观看| 一区二区日韩| 性闻联播| 飘花伊人827连裤袜| 国产又粗又黄又爽又硬的成人用品| 乳女教师3~婬辱の动| 成全视频观看免费高清完整版| 精产国品免费一二三产区福利片| 照美冥被啪羞羞漫画无尽| 爽?好大?快?深点动态图| 欧美亚洲日韩另类中文字幕麻豆| 日本中文字幕一区| 久久aV喷吹aV高潮aV欧美| 国产日韩欧美成人| 不负偏爱小说在线观看| 男人日女人逼逼| gay肉文| 曰批全过程又爽又大又黄| 精品人妻人人爽久久爽| 申鹤乳液狂飙丘丘人| 国产三级午夜理伦三级| 美女被扒开屁股进去网站视频| 揉...乳...深hhh| 欧美大片A18|