WeChatアプレットクラウド開発のマルチテーブル共同検索(クラウドデータベース、クラウド機能)

       今日、私はクラウド開発を使用して、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つのテーブルの共同チェックが理解されます。この場合、テーブルの多くは簡単ではありません。そのような説明ブログを誰も投稿したことがないので、他の人が迂回しないように投稿します。

 

私の個人的なオリジナルは、類似点がある場合、まったく偶然であるか、変更を加えるために私に連絡してください。転載またはCVの組み合わせでソースを示してください、ありがとうございます!(質問やエラーがある場合は、指摘してください、I QQ:752231513)

元の記事を20件公開 賞賛された45件 ビュー100,000以上

おすすめ

転載: blog.csdn.net/qq_30548105/article/details/105647358