ThinkJS MongoDB支持

2021-09-17 10:23 更新

MongoDB

ThinkJS 支持使用 MongoDB 數(shù)據(jù)庫,底層使用 mongodb 模塊。

配置

使用 MongoDB 數(shù)據(jù)庫,需要將模型中的配置 type 改為 mongo,修改配置文件 src/common/config/db.js

export default {
  type: "mongo"
}

如果要在連接 MongoDB 服務(wù)的時候添加額外的參數(shù),可以通過在 options 里追加,如:

export default {
  type: "mongo",
  options: {
    authSource: "admin"
  }
}

上面的配置后,連接 MongoDB 的 URL 變成類似于 mongodb://127.0.0.1:27017/?authSource=admin。

更多額外的配置請見 http://mongodb.github.io/node-mongodb-native/2.0/reference/connecting/connection-settings/。

創(chuàng)建模型

可以通過命令 thinkjs model [name] --mongo 來創(chuàng)建模型,如:

thinkjs model user --mongo

執(zhí)行完成后,會創(chuàng)建文件 src/common/model/user.js。如果想創(chuàng)建在其他模塊下,需要帶上具體的模塊名。如:

thinkjs model home/user --mongo

會在 home 模塊下創(chuàng)建模型文件,文件為 src/home/model/user.js。

模型繼承

模型需要繼承 think.model.mongo 類,如果當(dāng)前類不是繼承該類,需要手動修改。

ES6 語法

export default class extends think.model.mongo {

}

動態(tài)創(chuàng)建類的方式

module.exports = think.model("mongo", {

})

CURD 操作

CURD 操作和 Mysql 中接口相同,具體請見 模型 -> 介紹。

創(chuàng)建索引

mongo 模型可以配置索引,在增刪改查操作之前模型會自動去創(chuàng)建索引,配置放在 indexes 屬性里。如:

export default class extends think.model.mongo {
  init(...args){
    super.init(...args);
    //配置索引
    this.indexes = { 

    }
  }
}

單字段索引

export default class extends think.model.mongo {
  init(...args){
    super.init(...args);
    //配置索引
    this.indexes = { 
      name: 1
    }
  }
}

唯一索引

通過 $unique 來指定為唯一索引,如:

export default class extends think.model.mongo {
  init(...args){
    super.init(...args);
    //配置索引
    this.indexes = { 
      name: {$unique: 1}
    }
  }
}

多字段索引

可以將多個字段聯(lián)合索引,如:

export default class extends think.model.mongo {
  init(...args){
    super.init(...args);
    //配置索引
    this.indexes = { 
      email: 1
      test: {
        name: 1,
        title: 1,
        $unique: 1
      }
    }
  }
}

獲取索引

可以通過方法 getIndexes 獲取創(chuàng)建的索引。如:

export default class extends think.controller.base {
  async indexAction(){
    let model = this.model("user");
    let indexes = await model.getIndexes();
  }
}

aggregate

可以通過 aggregate 方法進行混合操作。如:

export default class extends think.model.mongo {
  match(){
    return this.aggregate([
      {$match: {status: "A"}},
      {$group: {_id: "$cust_id", total: {$sum: "$amount"}}}
    ]);
  }
}

具體請見 https://docs.mongodb.org/manual/core/aggregation-introduction/。

MapReduce

可以通過 mapReduce 方法進行 MapReduce 操作。如:

export default class extends think.model.mongo {
  execMapReduce(){
    let map = () => {
      emit(this.cust_id, this.amount);
    }
    let reduce = (key, values) => {
      return Array.sum(values);
    }
    return this.mapReduce(map, reduce, {
      query: {status: "A"},
      out: "order_totals"
    })
  }
}

具體請見 https://docs.mongodb.org/manual/core/aggregation-introduction/#map-reduce

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號