今日、私はクラウド開発を使用して、WeChatミニプログラムのデモを書いています。これは、研究室の予約のプロセスです。結局のところ、Java ssm + mysqlを単純なストロークで使用して、最初に書いてとても嬉しかったです。クラウドデータベースについて考えました。しかし、ギャップが非常に大きいことがわかりましたが、幸い、データベースに精通している限り、APIドキュメントを調べれば簡単に始めることができます。ただし、Du Niangと小規模プログラムのクラウド開発コミュニティでは、このマルチテーブル共同チェックの具体的な使用方法はほとんどないようです。APIドキュメントは初心者にとって実際には比較的難しく、教えを見つけるのが難しいので、ここで説明します。あまり意味のないコードです。
ユーザーテーブル、ラボテーブル、承認テーブルの合計3つのテーブルがあります。
userテーブルのデータは次のとおりです。
{
"_id":"f149f6775e9d6ec600876c1a16ced8c8", //这个是云数据库自动生成的id
"u_account":"asd",
"u_name":"学生1",
"u_password":"123",
"u_role":0
}
私の研究室のテーブルはこのようになります:
{
"_id":"0d9cdb685e9d8354007a2b0e376d0d73",
"l_name":"实验室C",
"l_manager":"负责人3",
"l_address":"教学楼C202",
"l_status":"可预约"
}
私の承認フォームは次のようになります。
{
"_id":"f149f6775e9dabd10090e4d452807018",
"u_account":"asd",
"l_id":"0d9cdb685e9d8354007a2b0e376d0d73",
"a_status":"待审核",
"a_date":"2020-04-18 20:59"
}
次のステップは、3つのテーブルが一緒にチェックされ、フィールドがマージされることを期待することです。
1.最初に2つのテーブルを見てください
アプレットの公式ドキュメントは非常に明確であり、共同調査に集約を使用したい
APIアドレス:https : //developers.weixin.qq.com/miniprogram/dev/wxcloud/guide/database/join.html
2.まず、承認フォームとユーザーフォームを確認します
// 云函数入口函数
exports.main = async (event, context) => {
return cloud.database().collection("tb_approval").aggregate() //选择我的审批表
.lookup({
from:"tb_user", //把tb_user用户表关联上
localField: 'u_account', //审批表的关联字段
foreignField: 'u_account', //用户表的关联字段
as: 'uapproval' //匹配的结果作为uapproval相当于起个别名
}).end({
success:function(res){
return res;
},
fail(error) {
return error;
}
})
}
出力は次のようになります。
{
_id:"f149f6775e9dabd10090e4d452807018",
u_account:"asd",
l_id:"0d9cdb685e9d8354007a2b0e376d0d73",
a_status:"待审核",
a_date:"2020-04-18 20:59",
uapproval:[
{
_id:"f149f6775e9d6ec600876c1a16ced8c8",
u_account:"asd",
u_name:"学生1",
u_password:"123",
u_role:0
}
]
}
3.返された結果を変更する
今、それは共同調査によるものではありません。心配しないでください、これはあなたが望むものではないことを知っています。あなたが望むのはこれです:
{
_id:"f149f6775e9dabd10090e4d452807018",
u_account:"asd",
l_id:"0d9cdb685e9d8354007a2b0e376d0d73",
a_status:"待审核",
a_date:"2020-04-18 20:59",
u_name:"学生1",
u_password:"123",
u_role:0
}
その方法は、replaceRoot、newRoot、projectを使用する必要があります。これら3つの使用法は、自分でAPIを調べます。
クラウド関数をこれに変更すると、上記の効果があります
var $ = cloud.database().command.aggregate //定义聚合操作符
// 云函数入口函数
exports.main = async (event, context) => {
return cloud.database().collection("tb_approval").aggregate()
.lookup({
from:"tb_user",
localField: 'u_account',
foreignField: 'u_account',
as: 'uapproval'
})
.replaceRoot({
//replaceRoot指定一个已有字段作为输出的根节点,也可以指定一个计算出的新字段作为根节点。
//newRoot 代表新的根节点
newRoot: $.mergeObjects([$.arrayElemAt(['$uapproval', 0]), '$$ROOT'])
//mergeObjects 累计器操作符
//$.mergeObjects([params1,params2...]) 可以合并多个元素
//$.arrayElemAt(['$uapproval', 0]), '$$ROOT']
//就是取uapproval数组的第一个元素,与原始的根融合在一起
})
.project({
//project把指定的字段传递给下一个流水线,指定的字段可以是某个已经存在的字段,也可以是计算出来的新字段
uapproval: 0
})
.end({
success:function(res){
return res;
},
fail(error) {
return error;
}
})
}
これは上記のようにデータを返します。しかし、これは2つのテーブルの合同チェックです。心配しないで、3つの時計がリリースされています
4. 3つのテーブルの共同検査
var $ = cloud.database().command.aggregate
// 云函数入口函数
exports.main = async (event, context) => {
return cloud.database().collection("tb_approval").aggregate()
.lookup({
from: "tb_user",
localField: 'u_account',
foreignField: 'u_account',
as: 'uapproval'
})
.lookup({
from: "tb_lab",
localField: 'l_id',
foreignField: '_id',
as: 'lapproval'
})
.replaceRoot({
newRoot: $.mergeObjects([$.arrayElemAt(['$uapproval', 0]), $.arrayElemAt(['$lapproval', 0]), '$$ROOT'])
})
.project({
uapproval: 0,
lapproval: 0
})
.end({
success: function (res) {
return res;
},
fail(error) {
return error;
}
})
}
返されるデータは次のとおりです。
{
_id:"f149f6775e9dabd10090e4d452807018",
u_account:"asd",
u_name:"学生1",
u_password:"123",
u_role:0,
l_id:"0d9cdb685e9d8354007a2b0e376d0d73",
l_name:"实验室C"
l_address:"教学楼C202",
l_manager:"负责人3",
l_status:"可预约",
a_status:"待审核",
a_date:"2020-04-18 20:59"
}
このようにして、3つのテーブルの共同チェックが理解されます。この場合、テーブルの多くは簡単ではありません。そのような説明ブログを誰も投稿したことがないので、他の人が迂回しないように投稿します。