Búsqueda conjunta de varias tablas del desarrollo de la nube de applets WeChat (base de datos en la nube, función en la nube)

       Hoy estoy escribiendo una demostración del mini programa WeChat, usando el desarrollo en la nube, que es un proceso para una cita de laboratorio. Después de todo, estaba muy feliz de escribir al principio, usando java ssm + mysql un simple trazo. Pensé en la base de datos en la nube. Pero luego descubrí que la brecha era bastante grande, pero afortunadamente, siempre y cuando sea competente en la base de datos, aún puede comenzar fácilmente mirando la documentación de la API para esto. Sin embargo, parece que Du Niang y la pequeña comunidad de desarrollo de programas en la nube tienen poco uso específico de esta verificación conjunta de múltiples tablas. No hay mucho sin sentido, código.

Tengo un total de tres tablas: mesa de usuario, mesa de laboratorio, mesa de aprobación

Los datos de la tabla de usuario son así:

{
    "_id":"f149f6775e9d6ec600876c1a16ced8c8", //这个是云数据库自动生成的id
    "u_account":"asd",
    "u_name":"学生1",
    "u_password":"123",
    "u_role":0
}

Mi mesa de laboratorio se ve así:

{
    "_id":"0d9cdb685e9d8354007a2b0e376d0d73",
    "l_name":"实验室C",
    "l_manager":"负责人3",
    "l_address":"教学楼C202",
    "l_status":"可预约"
}

Mi formulario de aprobación se ve así:

{
    "_id":"f149f6775e9dabd10090e4d452807018",
    "u_account":"asd",
    "l_id":"0d9cdb685e9d8354007a2b0e376d0d73",
    "a_status":"待审核",
    "a_date":"2020-04-18 20:59"
}

El siguiente paso es esperar que las tres tablas se verifiquen conjuntamente y los campos se fusionen.

1. Primero mira las dos tablas

La documentación oficial del applet es muy clara, y quiero usar la agregación para la investigación conjunta.

Dirección API:  https://developers.weixin.qq.com/miniprogram/dev/wxcloud/guide/database/join.html

2. Primero verifique el formulario de aprobación y el formulario de usuario

// 云函数入口函数
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;
            }
          })
}

La salida es así:

{
    _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. Modificar el resultado devuelto

Ahora, no es de la investigación conjunta. No te preocupes, sé que esto no es lo que quieres. Lo que quieres es esto:

{
    _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
}

Cómo hacerlo, debe usar replaceRoot, newRoot, project. El uso de estos tres mira la API usted mismo

Cambiar la función de nube a esto tendrá el efecto anterior

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;
            }
          })
}

Esto devolverá los datos como se indicó anteriormente. Pero aquí hay solo una verificación conjunta de las dos tablas. No te preocupes, se lanzan los tres relojes

4. Inspección conjunta de tres mesas

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;
      }
    })
}

Los datos devueltos son los siguientes:

{
    _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"
}

De esta manera, se entiende la verificación conjunta de las tres tablas. En este caso, más de la mesa no es una brisa. Al ver que nadie ha publicado un blog de explicación, entonces publico uno para que otros eviten desvíos.

 

Mi original personal, si hay alguna similitud, es pura coincidencia, o contáctame para hacer cambios. Vuelva a imprimir o la combinación de CV indique la fuente, ¡gracias! (Si tiene alguna pregunta o error, indíquelo, I QQ: 752231513)

Publicó 20 artículos originales · elogió 45 · vistas 100,000+

Supongo que te gusta

Origin blog.csdn.net/qq_30548105/article/details/105647358
Recomendado
Clasificación