<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      自己設(shè)計(jì)的數(shù)據(jù)庫表- mongodb

      let mongoose=require("mongoose");//require("mongodb")

      var Schema = mongoose.Schema;

      //最主要的功能盡量能快速1次或2次查詢找到,非主要功能盡量碎片化【多集合】,以保證可拓展性
      //主要功能:人,文章,文章評(píng)論|說說|留言|回復(fù)評(píng)論,圖標(biāo)的增刪改查
      //數(shù)據(jù)庫最好的邏輯:修改一個(gè)實(shí)體,這個(gè)實(shí)體的所有外鍵關(guān)聯(lián)它的所有信息,只根據(jù)外鍵就可以同步所有,不然東改西改邏輯容易亂!!

      // 所有的操作,都是先獲取當(dāng)前操作實(shí)體的id,然后通過它的所有外鍵,去同步信息:

      /*
       所有的操作,都是以實(shí)體為中心,用外鍵關(guān)聯(lián)來同步到其他實(shí)體;這樣只要關(guān)注1件事情,實(shí)體改變,關(guān)聯(lián)實(shí)體內(nèi)信息是否全部同步到位
       用一個(gè)實(shí)體作為
      */

      // !!!刪除操作是最麻煩的,因?yàn)閷?shí)體之間有鏈接,如果刪一個(gè),另外的鏈接如何關(guān)聯(lián)處理,跟著刪肯定不行!!!!
      // 刪除操作,人不能刪,其他實(shí)體刪除,只打一個(gè)disable標(biāo)簽,數(shù)據(jù)仍然存在,遇到disable實(shí)體就做特殊展示,包括關(guān)聯(lián)外鍵的特殊展示



      // 1.文章: 文章分可修改和不可修改2個(gè)類型
      //         增:文章集合內(nèi)插入;uid和atuid【同步人的信息】;
      //         刪:文章集合內(nèi)刪除;然后看其他表的關(guān)聯(lián)項(xiàng)里是否涉及到這個(gè)數(shù)據(jù),有的話就要關(guān)聯(lián)
      //         改:文章集合內(nèi)修改;然后看其他表的關(guān)聯(lián)項(xiàng)里是否涉及到這個(gè)數(shù)據(jù),有的話就要關(guān)聯(lián)
      //         查:文章集合通過id|其他外鍵|標(biāo)簽,找文章;然后根據(jù)文章id,關(guān)聯(lián)所有外鍵【文章下評(píng)論串聯(lián)需要前端自己串】
      // 2.評(píng)論:評(píng)論不可修改
      //         增:評(píng)論類型中插入評(píng)論;link>targetId,link>originId,uid,atuid關(guān)聯(lián)同步信息【人和文章的同步,自身同步】
      //         刪:~
      //         查和改:都不做

      // 3.用戶:不可刪,但可禁用,分權(quán)限等級(jí)【關(guān)聯(lián)文章操作權(quán)限,文章上熱搜權(quán)限 等各種權(quán)限,預(yù)留接口】
      //         增:添加用戶,默認(rèn)引導(dǎo)界面添加“外鍵”關(guān)聯(lián)
      //         刪:不需要做,沒見過那個(gè)網(wǎng)站還能刪自己帳號(hào)的
      //         改:實(shí)體內(nèi)容+關(guān)聯(lián)外鍵【一大堆】
      //         查:通過id或者其他屬性,查找某個(gè)人;然后根據(jù)文章id,關(guān)聯(lián)所有外鍵【文章下評(píng)論串聯(lián)需要前端自己串】

      // 4.圖表:增刪改查都是通過先操作圖表,然后根據(jù)里面的外鍵,來同步關(guān)聯(lián)實(shí)體


      // schema里面的屬性和字段,數(shù)據(jù)庫是會(huì)校驗(yàn)的,C++語言級(jí)別的校驗(yàn),
      // 但是用戶基數(shù)過大,那么大量的增|改操作,以為數(shù)據(jù)的校驗(yàn)導(dǎo)致性能出問題

      /*
      關(guān)鍵的核心
          1.每次操作實(shí)體,首先修改實(shí)體本身,然后列出和自己有關(guān)聯(lián)的其他所有表,看其他表的關(guān)聯(lián)項(xiàng)中是否要更新
          2.實(shí)體與實(shí)體之間,一般只要單向關(guān)聯(lián)即可,這樣完全可以做到功能的需要;
            單向關(guān)聯(lián)的好處是,操作實(shí)體,不需要修改其他關(guān)聯(lián)表;以操作最頻繁的表為主,也就是
            在操作最頻繁的那個(gè)表中添加關(guān)聯(lián)key,可以減少常用功能對(duì)應(yīng)的操作次數(shù)
          3.表和表之間做了雙向關(guān)聯(lián),有點(diǎn)是查詢方便,一張表包括了所有基本信息;
            但缺點(diǎn)也很明顯,操作一張表的實(shí)體,還需要同步到關(guān)聯(lián)表,而且這個(gè)是原子操作
            也就是必須通過事務(wù)來實(shí)現(xiàn)雙向關(guān)聯(lián)的表
      */


      /*mongodb默認(rèn)值設(shè)置注意事項(xiàng):
          1.設(shè)置了default,就不需要設(shè)置required了,因?yàn)椴还苡袥]有傳,因?yàn)闆]傳就用default,所以就不存在需要不需要,肯定有值
          2.如果設(shè)置了required,但是沒有設(shè)置default,也沒有傳入,那么數(shù)據(jù)庫就會(huì)校驗(yàn)報(bào)錯(cuò)
          3.對(duì)象里面屬性的默認(rèn)值試了一下,設(shè)置是沒有效果的,傳入就會(huì)覆蓋;不傳入的話數(shù)據(jù)庫也不會(huì)自動(dòng)創(chuàng)建默認(rèn)值
          4.表內(nèi)的unique:true的字段不要輕易刪,不然后續(xù)添加的會(huì)一直報(bào)之前刪除的哪個(gè)鍵重復(fù),因?yàn)槊看尾迦攵际强眨罩迪嗤?/div>
            解決辦法個(gè)人猜測時(shí)更新”集合“;
          5.如果一個(gè)字段設(shè)置了unique,那他肯定是require
          6.default的意思是,這個(gè)key的數(shù)值不放在表里,如果有人請(qǐng)求這個(gè)字段,那就從獲取默認(rèn)字段還給他
            默認(rèn)字段的貨期是動(dòng)態(tài)的,比如設(shè)置默認(rèn)字段值是Date.now(),那么以后每次獲取,都是再獲取的時(shí)候
            執(zhí)行Date.now(),然后返回這個(gè)值,所以這個(gè)壓根就不是不變的默認(rèn)值,所以設(shè)置默認(rèn)值
            別用動(dòng)態(tài)的js計(jì)算,里面有變量的話,每次都不一樣

            deafult值是不能用于find條件查找的,所以要設(shè)置條件查找的默認(rèn)值,還是得用Object.assign(default對(duì)象)
      */


      /*----------------------------------------user start-------------------------------------------------------*/
      //mongodb支持populate填充設(shè)置多表嵌套關(guān)聯(lián),mongoose用populate實(shí)現(xiàn),前提是表中設(shè)置ref
      //涉及到改數(shù)據(jù)庫,還是算了,其實(shí);性能上還是$lookup比較好,但是只能雙表關(guān)聯(lián)
      var userSchema=new Schema({//用系統(tǒng)自己產(chǎn)生的id,保證唯一性,返回?cái)?shù)據(jù)的時(shí)候帶上id
          timeStamp:{//時(shí)間動(dòng)態(tài)碼,每次用戶登錄,先獲取動(dòng)態(tài)碼,然后返回管客戶端,再次ajax請(qǐng)求
                     //通過用戶名+密碼+動(dòng)態(tài)碼校驗(yàn),正確后就設(shè)置最新動(dòng)態(tài)碼,修改完后然后執(zhí)行登錄態(tài)記錄
              type:Number
          },
          time:{
              type:Number
          },
          passward:{
              type:String,
              required:true//require為true的數(shù)據(jù),在傳入數(shù)據(jù)庫的時(shí)候必須要有,如果沒有,就會(huì)報(bào)錯(cuò)
          },
          userName:{//用戶名|網(wǎng)名|昵稱|花名【唯一,大家網(wǎng)名不能相互重復(fù)】:注冊(cè)時(shí)可以不填寫,后續(xù)添加:因?yàn)槊Q唯一性容易重復(fù)導(dǎo)致用戶體驗(yàn)下降
              type:String,
              unique:true
          },
          phone:{
              type:String,
              required:true,
              unique:true
          },
          name:{//真實(shí)姓名
              type:String,
              default:""
          },
          age:{
              type:String,
              default:""
          },
          sex:{
              type:String,
              default:""
          },

          userPic:{
              type:String,
              default:"/upload/default.png"http://用戶沒有頭像就用默認(rèn)圖片做頭像
          },

          level:{//個(gè)人的等級(jí),等級(jí)越高,主頁展示得越考前:這個(gè)等級(jí)通過文章的linkUser和linkComment綜合評(píng)分,得到一個(gè)等級(jí)
              type:Number,
              default:1
          },

          categroy:{//用戶的不同種類,區(qū)分不同的權(quán)限,后續(xù)再設(shè)置,默認(rèn)權(quán)限1,正常用戶
              // type:[Schema.Types.Integer],
              type:String,
              default:"1"
          },
         
         
          //關(guān)聯(lián)的所有用戶
          linkUser:{
              type:Object,
              properties:{
                  fans:{//粉絲  不需要,fans和attention只需要一個(gè),不需要雙向關(guān)聯(lián)
                      type:Array//uid
                  },
                  attention:{//關(guān)注哪些人
                      type:Array//uid
                  },
                  blackList:{//黑名單
                      type:Array//uid
                  },
                  specialAttention:{//特別關(guān)注
                      type:Array//uid
                  }
              }
          }
      });

      /*----------------------------------------user end-------------------------------------------------------*/






      /*----------------------------------------article start-------------------------------------------------------*/

      //文章【不包含說說,評(píng)論,留言板留言等,只是文章】
      var articleSchema=new Schema({
          time:{//文章寫的時(shí)間
              type:Number,
              required:true
          },
          title:{//標(biāo)題
              type:String,
              required:true
          },
          content:{//內(nèi)容
              type:String,
              required:true
          },
          tag:{//標(biāo)簽
              type:Array
          },

          //默認(rèn)不鑒權(quán),所以篩選條件中不需要添加accessViewUser|accessCommentUser
          //一旦用戶開啟鑒權(quán),需要給accessViewUser|accessCommentUser設(shè)置all或者特定的人
          //這樣下次訪問這篇文章,遇到needAccess為true,才能通過accessViewUser|accessCommentUser
          //數(shù)組內(nèi)對(duì)應(yīng)的值來判斷是否能讓用戶訪問
          needAccess:{//true表示需要鑒權(quán)才能查看,這個(gè)參數(shù)查詢的時(shí)候要帶過來;
              type:Boolean
          },
          categroy:{//文章的類型,類型1表示默認(rèn)文章,無類型;2表示技術(shù)分享;3每日復(fù)盤;4表示熱點(diǎn)討論
              type:String,
              default:"1"
          },

          level:{//文章的等級(jí),等級(jí)越高,主頁展示得越考前:這個(gè)等級(jí)通過文章的linkUser和linkComment綜合評(píng)分,得到一個(gè)等級(jí)
              type:Number,
              default:1
          },

          //--------------------------下面是關(guān)聯(lián)數(shù)據(jù)----------------------------------

         
          linkUser:{
              type:Object,
              required:true,
              properties:{
                  uid:{//去關(guān)聯(lián)用戶表:誰寫的
                      type:mongoose.Types.ObjectId,//mongodb的compass中查看
                      required:true
                  },

                  accessViewUser:{//數(shù)組中出現(xiàn)"all",表示所有都可以查看,
                      type:Array
                  },
                  accessCommentUser:{//數(shù)組中出現(xiàn)"all",表示所有都可以查看,
                      type:Array
                  },
                  fav:{//點(diǎn)贊 :uid
                      type:Array
                  },
                  collect:{//收藏 :uid
                      type:Array
                  },
                  relay:{//轉(zhuǎn)發(fā) :uid
                      type:Array
                  },
                  comment:{//評(píng)論的人:uid
                      type:Array
                  },
                  atList:{//評(píng)論的@相關(guān)人員,atId主動(dòng)at的人;atedId是被at的人
                      type:Array//{atId,atedId,atType:2表示文章的at,4表示評(píng)論的at}
                  }
              }
          }

      });




      /*----------------------------------------article end-------------------------------------------------------*/







      /*----------------------------------------comment start-------------------------------------------------------*/


      /*短文:因?yàn)檫@個(gè)量非常大,所以需要單獨(dú)拎出來,不能和文章放在一個(gè)集合里面
          1.“個(gè)人說說”:沒針對(duì)誰,自己發(fā)的說說,
          2.“文章評(píng)論:針對(duì)文章的第一層留言,人與人之間回復(fù)不算”,
          3.“留言板留言:針對(duì)某個(gè)人,是某人留言板下的1級(jí)留言,”,
          4.“評(píng)論回復(fù)”:就是2級(jí)+的評(píng)論【上面123都是1級(jí)評(píng)論】
          5.“圖表留言”:針對(duì)圖表的第一層留言
       
       注意:
           1.這個(gè)表的linkOther必須建立索引,查詢非常多,量也大,所以需要的索引的內(nèi)存也很大
           如果有1億的數(shù)據(jù),索引內(nèi)存大小是: 2^32 = 4G;【每個(gè)用戶平均萬級(jí)別數(shù)據(jù)條數(shù);1億用戶】
           所以萬億級(jí)別的表就是極限了【到時(shí)候看下建立索引需要多大內(nèi)存】
           2.人物,文章,圖表的刪除操作邏輯都不復(fù)雜,也好操作;
              但評(píng)論的增加和刪除,必須有一個(gè)復(fù)雜,另外一個(gè)才好操作;
              新增較多刪除少,所以新增做簡單,刪除做復(fù)雜;
              方案1:刪除的時(shí)候,評(píng)論下面所有的評(píng)論,要一級(jí)一級(jí)關(guān)聯(lián)【前端做關(guān)聯(lián):列出所有下級(jí)評(píng)論id】;
                   最后統(tǒng)一發(fā)達(dá)數(shù)據(jù)庫做批量刪除;這樣的話,別人下面的評(píng)論不明所以就不見了
                   體驗(yàn)不好
              方案2:單獨(dú)刪除當(dāng)前評(píng)論,級(jí)聯(lián)下面所有的評(píng)論【前端做關(guān)聯(lián):列出所有下級(jí)評(píng)論id】,
                     統(tǒng)一給下面所有的評(píng)論的linkOther添加屬性isDelete,告訴它父節(jié)點(diǎn)被刪除;
                     同時(shí)數(shù)據(jù)庫每隔一段時(shí)間執(zhí)行刪除linkOther.isDelete是true的comment文檔
      */
      var commentSchema=new Schema({//自動(dòng)產(chǎn)生的id為cid,就是評(píng)論id
          time:{//文章寫的時(shí)間
              type:Number
          },
          content:{//內(nèi)容
              type:String,
              required:true
          },

          level:{//評(píng)論等級(jí),等級(jí)越高,文章內(nèi)展示得越靠前:這個(gè)等級(jí)通過linkUser和linkOther綜合評(píng)分,得到一個(gè)等級(jí)
              type:Number,
              default:1
          },

          //--------------------------下面是關(guān)聯(lián)數(shù)據(jù)----------------------------------

          linkUser:{
              type:Object,
              required:true,
              properties:{
                  uid:{//誰寫的
                      type:mongoose.Types.ObjectId,//mongodb的compass中查看
                      required:true
                  },
                  fav:{//點(diǎn)贊 :uid
                      type:Array
                  },
                  collect:{//收藏 :uid
                      type:Array
                  },
                  relay:{//轉(zhuǎn)發(fā) :uid
                      type:Array
                  },
                  comment:{//評(píng)論的人:uid
                      type:Array
                  },
                  atList:{//評(píng)論的@相關(guān)人員,atId主動(dòng)at的人的id;atedId是被at的人的id:atId和上面的uid一樣,就是作者主動(dòng)at別人
                      type:Array//{atId,atedId,atType:2表示文章的at,4表示評(píng)論的at}
                  }
              }
          },

          //鏈接的父元素節(jié)點(diǎn):一條評(píng)論只會(huì)有一個(gè)外部關(guān)聯(lián)項(xiàng),也就是只有一個(gè)category類型
          // 通過linkOrigin,前端就可以串聯(lián)出某篇文章下的所有評(píng)論數(shù)據(jù)和關(guān)系
          // 前端需要通過遍歷樹操作,才能把所有評(píng)論串起來,前端邏輯比較復(fù)雜,但為了數(shù)據(jù)庫的簡化+可拓展性,是值得的
          // linkOther改名為linkParent比較恰當(dāng),但業(yè)務(wù)寫好了沒法改了
          linkOther:{//
              type:Object,
              required:true,
              properties:{
                  category:{
                  //這條評(píng)論自己的類別:[1,2,3,4,5:詳細(xì)介紹見下面]【注意這個(gè)和linkOrigin要區(qū)分】
                  // 這里的category是評(píng)論自身的屬性,不是它的關(guān)聯(lián)節(jié)點(diǎn)的屬性;
                  // 沒有必要知道關(guān)聯(lián)節(jié)點(diǎn)的屬性
                      type:String,
                      required:true
                  },
                  targetId:{//被回復(fù)方【article|comment】的id:針對(duì)的哪個(gè)目標(biāo)的“回復(fù)|評(píng)論”
                      // 如果category是1類型,targetId就是自己個(gè)人的uid;【放自己說說列表】
                      // 如果category是2類型,targetId就是aid,放到對(duì)應(yīng)文章下面
                      // 如果category是3類型,targedid就是其他人的uid【放對(duì)方留言板1級(jí)留言】
                      // 如果category是4類型,targedid就是cid,放到其他評(píng)論的下面
                      // 如果category是5類型,targedid就是chartId,放到對(duì)應(yīng)圖表下面
                      type:mongoose.Types.ObjectId,//mongodb的compass中查看
                      required:true
                  },
                  targetUserId:{//被回復(fù)方的用戶Id
                      type:mongoose.Types.ObjectId,
                      required:true
                  }
              }
          },

          //這條評(píng)論的源頭是哪里:他和linkOther的category字段意義不同,別混淆
          //這個(gè)字段是為了方便數(shù)據(jù)的查找,找到源頭就可以找出所有下面的評(píng)論,接下來由前端去串聯(lián)
          //如果沒有這個(gè)字段,那么評(píng)論就要在后臺(tái)一級(jí)一級(jí)地串聯(lián),非常耗費(fèi)性能。
          linkOrigin:{//
              type:Object,
              required:true,
              properties:{
                  category:{//這條評(píng)論的源頭的類型:[1,2,3,4,5:詳細(xì)介紹見下面]
                      type:String,
                      required:true
                  },
                  targetId:{//屬于的那個(gè)源頭的id
                      // 如果category是1類型,targetId就是cid,源頭是個(gè)人的說說
                      // 如果category是2類型,targetId就是aid,源頭是文章
                      // 如果category是3類型,targedid就是uid,源頭是別人的留言板
                      // 如果category是5類型,targedid就是chartId,源頭是圖表
                      type:mongoose.Types.ObjectId,//mongodb的compass中查看
                      required:true
                  }
              }
          }

      });


      /*----------------------------------------comment end-------------------------------------------------------*/



      /*----------------------------------------tag start-------------------------------------------------------*/

      //標(biāo)簽系統(tǒng):追蹤文章類型,當(dāng)前熱搜【熱度,和持續(xù)時(shí)間】
      var tagSchema=new Schema({
          startTime:{//標(biāo)簽新建的時(shí)間
              type:Number,
              required:true
          },
          latestTime:{//標(biāo)簽最新被別人添加的時(shí)間
              type:Number,
              required:true
          },
          content:{//內(nèi)容
              type:String,
              required:true
          },

          categroy:{//文章的類型,類型1表示默認(rèn)文章,無類型;2表示技術(shù)分享;3每日復(fù)盤;4表示熱點(diǎn)討論
              type:String,
              default:"1"
          },

          level:{//標(biāo)簽等級(jí),等級(jí)越高,各種業(yè)務(wù)展示的優(yōu)先級(jí)越高
              type:Number,
              default:1
          },

          //--------------------------下面是關(guān)聯(lián)數(shù)據(jù)----------------------------------

         
          linkArticle:{//cid
              type:Array
          },
          linkUser:{//uid
              type:Array
          },

      });

      /*----------------------------------------tag end-------------------------------------------------------*/




      /*----------------------------------------chart start-------------------------------------------------------*/

      //圖表:結(jié)構(gòu)和文章基本一樣,只是標(biāo)題非必須
      var chartSchema=new Schema({
          time:{//時(shí)間
              type:Number
          },
          title:{//圖標(biāo)可以沒有標(biāo)題,也可以有
              type:String,
              default:""
          },
          content:{//圖表數(shù)據(jù)內(nèi)容,轉(zhuǎn)成字符串
              type:String,
              required:true
          },
          tag:{//標(biāo)簽
              type:Array
          },
          categroy:{//文章的類型,類型1表示默認(rèn)圖表【以后可增加各種類型圖表】
              type:String,
              default:"1"
          },

          level:{//圖表的推送等級(jí),等級(jí)越高,展示得越靠前:這個(gè)等級(jí)通過圖表的linkUser和linkComment綜合評(píng)分,得到一個(gè)等級(jí)
              type:String,
              default:"1"
          },

          //--------------------------下面是關(guān)聯(lián)數(shù)據(jù)----------------------------------
          linkUser:{
              type:Object,
              required:true,
              properties:{
                  uid:{//去關(guān)聯(lián)用戶表:誰寫的
                      type:mongoose.Types.ObjectId,//mongodb的compass中查看
                      required:true
                  },
                  fav:{//點(diǎn)贊 :uid
                      type:Array
                  },
                  collect:{//收藏 :uid
                      type:Array
                  },
                  relay:{//轉(zhuǎn)發(fā) :uid
                      type:Array
                  },
                  comment:{//評(píng)論的人:uid
                      type:Array
                  },
                  atList:{//評(píng)論的@相關(guān)人員,atId主動(dòng)at的人;atedId是被at的人
                      type:Array//{atId,atedId,atType:2表示文章的at,4表示評(píng)論的at,5表示圖表的at}
                  }
              }
          }
      });


      /*----------------------------------------char end-------------------------------------------------------*/



      /*----------------------------------------熱度評(píng)分表 不做了,沒必要做那么好,又不是靠這個(gè)賺錢,只是練習(xí)而已 start-------------------------------------------------------*/

      //熱門推薦系統(tǒng):產(chǎn)生熱門作者和熱門文章
      //每次點(diǎn)擊的時(shí)候,都需要操作修改統(tǒng)計(jì)表,所以不能放在主表,以免操作過于頻繁
      //每次熱度值變化,任何點(diǎn)贊,評(píng)論,轉(zhuǎn)發(fā),收藏,點(diǎn)擊文章,都會(huì)涉及文章熱度變化,都要查詢表
      // 所以必須獨(dú)立出來,否則對(duì)內(nèi)容表的操作太頻繁,容易卡死

      // var hotArticleSchema=new Schema({
      //     aid:"文章id",
      //     uid:"作者id",
      //     uv:[{uid:"",pv:[time,time,...]},{uid:"",pv:[time,time,...]}],
      //     fav:[{uid:"",time:""},{uid:"",time:""}],
      //     collect:[{uid:"",time:""},{uid:"",time:""}],
      //     comment:[{uid:"",list:[{cid,time}]},{uid:"",list:[{cid,time}]}],
      //     cotalHot:"總體熱度",
      //     curHot:"當(dāng)前熱度"http://設(shè)置最近的某段時(shí)間內(nèi)的累計(jì)熱度
      // });


      // //用戶推薦較少,所以依賴于其他表的搜索,內(nèi)部不添加實(shí)體信息;熱度邏輯在返回客戶端信息后再計(jì)算統(tǒng)計(jì)
      // var hotUserSchema=new Schema({//計(jì)算總分需要查hotArticleSchema表【獲取文章評(píng)分】+user表【獲取粉絲評(píng)分】
      //     uid:"用戶id",
      //     totalHot:100,//總體熱度【粉絲權(quán)重可設(shè)置】:粉絲+所有文章評(píng)分累計(jì)
      //     curHot:10//最近熱度【時(shí)間寬度可設(shè)置】:最近一段時(shí)間粉絲增量+最近一段時(shí)間文章評(píng)分累計(jì)
      // });

      /*----------------------------------------熱度評(píng)分表 end-------------------------------------------------------*/




      //必須的不傳會(huì)報(bào)錯(cuò),非必須的都給默認(rèn)值,這樣創(chuàng)建的時(shí)候就比較方便,用不到defaultUser,因?yàn)閿?shù)據(jù)庫里設(shè)置了
      let defaultUser={//用系統(tǒng)自己產(chǎn)生的id,保證唯一性,返回?cái)?shù)據(jù)的時(shí)候帶上id
          timeStamp:Date.now(),
          time:Date.now()//注冊(cè)時(shí)間
          // passward:"",//必須前端傳入
          // userName:"",//必須前端傳入
          // phone:"",//必須前端傳入
         
          // //關(guān)聯(lián)的所有用戶
          // linkUser:{
          //     fans:[],
          //     attention:[],
          //     blackList:[],
          //     specialAttention:[]
          // }
      }


      //新建文章的默認(rèn)藍(lán)本
      var defaultArticle={//這個(gè)是服務(wù)器啟動(dòng)時(shí)間,不是實(shí)時(shí)的時(shí)間
          time:Date.now()
          // title:"",//必須前端傳入
          // content:"",//必須前端傳入
          // tag:[],
          // linkUser:{
          //     uid:"",//必須后端傳入
          //     fav:[],
          //     collect:[],
          //     relay:[],
          //     comment:[],
          //     atList:[]
          // }
      };


      var defaultComment={
          time:Date.now()
          // time:Date.now(),
          // content:"",//必須前端傳入
          // linkUser:{
          //     uid:""http://必須前端傳入
          // },
          // linkOther:{
          //     category:0,//必須前端傳入
          //     targetId:""http://必須前端傳入
          // }
          // linkOrigin:{
          //     category:0,//必須前端傳入
          //     targetId:""http://必須前端傳入
          // }
      };


      //新建圖表的時(shí)候用到
      var defaultChart={
          time:Date.now()
          // time:Date.now(),
          // title:"",
          // content:"",//必須前端傳入
          // tag:[],
          // linkUser:{
          //     uid:"",//必須前端傳入
          //     fav:[],
          //     collect:[],
          //     relay:[],
          //     comment:[],
          //     atList:[]
          // }
      };

      var defaultTag={
          startTime:Date.now(),
          latestTime:Date.now()
          // time:Date.now(),
          // title:"",
          // content:"",//必須前端傳入
          // tag:[],
          // linkUser:{
          //     uid:"",//必須前端傳入
          //     fav:[],
          //     collect:[],
          //     relay:[],
          //     comment:[],
          //     atList:[]
          // }
      };



      userSchema = mongoose.model('User',userSchema );
      articleSchema = mongoose.model('Article',articleSchema );
      commentSchema = mongoose.model('Comment',commentSchema );
      chartSchema = mongoose.model('Chart',chartSchema );
      tagSchema = mongoose.model('Tag',tagSchema );

      module.exports= {tagSchema,userSchema,articleSchema,commentSchema,chartSchema,defaultUser,defaultArticle,defaultComment,defaultChart,defaultTag};










          //關(guān)聯(lián)的所有圖表:chart實(shí)體中有了,這里沒必要做反向關(guān)聯(lián)
          // linkChart:{
          //     type:Object,
          //     properties:{
          //         content:{//自己有哪些圖表
          //             type:Array//圖標(biāo)的chartid的列表
          //         },
          //         fav:{//點(diǎn)贊的圖表
          //             type:Array
          //         },
          //         collect:{//收藏的圖表
          //             type:Array
          //         },
          //         relay:{//轉(zhuǎn)發(fā)的圖表
          //             type:Array
          //         },
          //         atList:{
          //             type:Array//自己at別人的圖表【文章可以是別人的,也可以是自己的】
          //             // 數(shù)組內(nèi)是對(duì)象,別人at我的信息是否已讀用isRead,
          //             // 用于用戶登錄的時(shí)候或?qū)崟r(shí)提醒用戶瀏覽“未讀信息”
          //             // {atType:2表示文章的at,4表示評(píng)論的at,atId:內(nèi)容對(duì)應(yīng)的id,isRead:是否已讀}
          //         },
          //         atedList:{
          //             type:Array//別人at自己的圖表【文章可以是別人的,也可以是自己的】
          //         }
          //     }
          // },

          //關(guān)聯(lián)的所有文章:article實(shí)體中有了,這里沒必要做反向關(guān)聯(lián)
          // linkArticle:{
          //     type:Object,
          //     properties:{
          //         content:{ //自己的文章
          //             type:Array//aid
          //         },
          //         fav:{
          //             type:Array
          //         },
          //         collect:{
          //             type:Array
          //         },
          //         relay:{
          //             type:Array
          //         },
          //         atList:{
          //             type:Array
          //         },
          //         atedList:{
          //             type:Array
          //         }
          //     }
          // },

          //關(guān)聯(lián)的所有評(píng)論:comment實(shí)體中有了,這里沒必要做反向關(guān)聯(lián)
          // linkComment:{
          //     type:Object,
          //     properties:{
          //         content:{//自己寫的所有“文章評(píng)論|回復(fù)評(píng)論|說說|留言板評(píng)論”
          //             type:Array//cid
          //         },
          //         fav:{//我收藏點(diǎn)贊的所有評(píng)論
          //             type:Array
          //         },
          //         collect:{
          //             type:Array
          //         },
          //         relay:{
          //             type:Array
          //         },
          //         atList:{
          //             type:Array
          //         },
          //         atedList:{
          //             type:Array
          //         },
          //         msgboard:{//留言板,誰給我留言了
          //             type:Array//cid
          //         }
          //     }
          // }












              // //關(guān)聯(lián)評(píng)論:沒必要做反向關(guān)聯(lián),評(píng)論里面已經(jīng)包含對(duì)應(yīng)關(guān)聯(lián)文章的id
          // linkComment:{
          //     type:Array//[{type:2|4,contentId:aid|cid}],type=2表示文章的1級(jí)評(píng)論,type=4表示評(píng)論回復(fù)
          // }









              //關(guān)聯(lián)評(píng)論:圖表下的所有評(píng)論:沒必要反向關(guān)聯(lián),comment中已經(jīng)有關(guān)聯(lián)項(xiàng)了
          // linkComment:{
          //     type:Array//[{type:2|4,contentId:aid|cid}],type=5表示圖表的1級(jí)評(píng)論,type=4表示評(píng)論回復(fù)
          // }
      posted @ 2024-11-03 21:31  挺禿然  閱讀(60)  評(píng)論(0)    收藏  舉報(bào)
      主站蜘蛛池模板: 精品一日韩美女性夜视频| 亚洲色大成成人网站久久| 国产成人高清亚洲综合| 国产欧美日韩精品丝袜高跟鞋| 亚洲色婷婷综合久久| 色欲av久久一区二区三区久| 久久99国产精品久久99小说 | 在线天堂中文新版www| a4yy私人毛片| 日韩精品一区二区亚洲av| 把腿张开ji巴cao死你h| 石城县| 日本精品aⅴ一区二区三区| 午夜福利免费视频一区二区| 国产精品疯狂输出jk草莓视频| 麻豆国产成人AV在线播放| AV最新高清无码专区| 中文字幕国产精品综合| 国产乱码一区二区三区| 亚洲国产精品久久无人区| 可以在线观看的亚洲视频| 国产日韩精品欧美一区灰| 无码国产精品成人| 国产一区二区三区综合视频| 2019国产精品青青草原| 国产高清在线a视频大全| 亚洲一区中文字幕人妻| 欧美国产精品啪啪| 夜鲁鲁鲁夜夜综合视频| 无码av免费毛片一区二区| 日本一区二区三区视频版| 久久一区二区中文字幕| 拍真实国产伦偷精品| 国产精品人伦一区二区三| 一区二区三区精品视频免费播放| 国精偷拍一区二区三区| 国精品无码一区二区三区在线看 | 欧美日韩免费专区在线观看| 毛片内射久久久一区| 国产精品久久久一区二区三区| 亚洲欧洲精品一区二区|