W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
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/。
可以通過命令 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)前類不是繼承該類,需要手動修改。
export default class extends think.model.mongo {
}
module.exports = think.model("mongo", {
})
CURD 操作和 Mysql 中接口相同,具體請見 模型 -> 介紹。
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
方法進行混合操作。如:
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 操作。如:
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。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: