uni-app 支付宝云联表查询BUG

发布于 1周前 作者 h691938207 来自 Uni-App

uni-app 支付宝云联表查询BUG

示例代码:

问题2的代码如下:

const article= db.collection("article").getTemp();  
const comment = db.collection("comment").where(`user_id == "${uni_id}"`).getTemp();  
const res = await db.collection(article,comment).get();

操作步骤:

const article= db.collection("article").getTemp();  
const comment = db.collection("comment").where(`user_id == "${uni_id}"`).getTemp();  
const res = await db.collection(article,comment).get();

预期结果:

问题1:_id 字段下返回副表非空数组
问题2: articleid字段下返回副表非空数组

实际结果:

问题1:_id 字段下未生成副表数组
问题2: articleid字段下返回副表数组为空,去掉副表where条件后,方才返回数据

bug描述:

在对示例:article、comment 进行联表查询发现两个问题:
1、comment的外键指向article表中’_id’时,无法查出comment表的数据
2、comment的外键指向article表中自定义’articleid’时,在加上where条件后,无法查出comment表的数据
经过多次测试,只要用_id字段,或者副表加上where条件,联查结果副表必定是空数组


10 回复

db schema有配置外键吗?


肯定加了的,也上传过,像问题2的where条件,单独拿出来查正常,联查就失效,我是用的免费版

副表的orderBy也不起作用????


我这个问题我确认下。

发一下服务空间ID和查询语句。

回复 DCloud_uniCloud_CRL: 空间id:env-00jxhormd20o

const questions= db.collection(‘questions’).getTemp(); // const question_type= db.collection(‘question_type’).getTemp(); const options= db.collection(‘options’).where({is_correct:true}).getTemp(); //加where orderBy不起作用 const res1= await db.collection(questions,options).get(); console.log(res1)

回复 DCloud_uniCloud_CRL: 副表加上where后question_id下面options数组就为空

确认问题,已反馈支付宝云排查。

针对您提到的 uni-app 支付宝云联表查询中遇到的BUG问题,这里提供一个可能的代码案例和解决思路,以便您参考和调试。请注意,由于具体的BUG描述未给出,以下示例将涵盖一些常见的查询场景及潜在问题解决方案。

场景假设

假设我们在使用 uni-app 结合支付宝小程序云开发进行联表查询时,遇到数据查询不准确或查询失败的BUG。

代码示例

1. 初始化云开发环境

首先,确保在 manifest.json 中配置了支付宝小程序的云开发环境ID,并在 main.js 中初始化云能力:

// main.js
import Vue from 'vue'
import App from './App'

Vue.config.productionTip = false

App.mpType = 'app'

const app = new Vue({
    ...App
})

// 初始化云开发
wx.cloud.init({
    env: 'your-env-id', // 替换为你的云开发环境ID
    traceUser: true,
})

app.$mount()

2. 联表查询示例

假设我们有两张表 usersorders,需要查询用户及其订单信息。由于直接联表查询在云开发中不常见(通常通过数据关联处理),这里展示如何通过两次查询模拟联表查询:

// 云函数 queryUserOrders.js
const cloud = require('wx-server-sdk')

cloud.init()
const db = cloud.database()

exports.main = async (event, context) => {
    const userId = event.userId
    try {
        const userResult = await db.collection('users').doc(userId).get()
        const orderResult = await db.collection('orders').where({
            userId: db.cmd.get(userId)
        }).get()

        return {
            user: userResult.data[0],
            orders: orderResult.data
        }
    } catch (error) {
        console.error(error)
        return {
            error: error.message
        }
    }
}

3. 小程序端调用云函数

// 在小程序页面或组件中调用云函数
wx.cloud.callFunction({
    name: 'queryUserOrders',
    data: {
        userId: 'some-user-id' // 替换为实际用户ID
    },
    success: res => {
        console.log('User and Orders:', res.result)
    },
    fail: err => {
        console.error('Error:', err)
    }
})

解决思路

  • 检查环境配置:确保云开发环境ID正确无误。
  • 调试云函数:在云函数中打印日志,检查数据查询逻辑是否正确。
  • 检查数据模型:确保数据库集合及字段名称正确。
  • 网络问题:检查小程序端与云函数之间的网络请求是否正常。

以上代码和思路仅供参考,具体BUG需结合实际情况分析。希望这些信息对您有所帮助!

回到顶部