uni-app 支付宝小程序云函数查询不存在ID时 where与doc返回结果不一致 阿里云正常

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

uni-app 支付宝小程序云函数查询不存在ID时 where与doc返回结果不一致 阿里云正常

操作步骤:

id 是一个不存在的。 db.collection("collection").doc(id).get() 返回的结果是 [null],有一个元素的数组 db.collection("collection").where({_id:id}).get() 返回的结果是 [] 空数组

而阿里云返回的都是 [] 空数组

预期结果:

返回空数组

实际结果:

id 是一个不存在的。 db.collection("collection").doc(id).get() 返回的结果是 [null],有一个元素的数组 db.collection("collection").where({_id:id}).get() 返回的结果是 [] 空数组

而阿里云返回的都是 [] 空数组

bug描述:

id 是一个不存在的。 db.collection("collection").doc(id).get() 返回的结果是 [null],有一个元素的数组 db.collection("collection").where({_id:id}).get() 返回的结果是 [] 空数组

而阿里云返回的都是 [] 空数组


5 回复

HBuilderX 3.99.2023121601-alpha 已修复。


你好,能看看我的问题吗

问题已确认并已修复。重新上传云函数试下。本地运行需要等HBuilderX下次更新。

在 uni-app 开发支付宝小程序时,使用云函数查询数据时,如果查询的 ID 不存在,wheredoc 方法返回的结果可能会不一致。同时,你提到在阿里云环境下是正常的。以下是一些可能的原因和解决方案:

1. wheredoc 的区别

  • where: 用于条件查询,返回符合条件的所有记录。如果查询条件不匹配任何记录,返回的结果是一个空数组。
  • doc: 用于根据文档 ID 查询单个文档。如果文档 ID 不存在,返回的结果是 null

2. 问题分析

  • 支付宝小程序云函数: 在支付宝小程序中,云函数的实现可能与阿里云的实现略有不同,导致 wheredoc 在查询不存在 ID 时的行为不一致。
  • 阿里云正常: 在阿里云环境下,wheredoc 的行为可能符合预期,但在支付宝小程序中可能存在差异。

3. 解决方案

  • 检查云函数实现: 确保云函数的实现逻辑在支付宝小程序和阿里云环境下一致。可以对比两边的代码,查找可能的差异。
  • 处理查询结果: 在代码中处理 wheredoc 返回的结果,确保在查询不存在 ID 时能够正确处理。
    • 对于 where,检查返回的数组是否为空。
    • 对于 doc,检查返回的结果是否为 null
  • 调试和日志: 在云函数中添加日志,输出查询条件和返回结果,帮助定位问题。

4. 示例代码

以下是一个示例代码,展示如何处理 wheredoc 的查询结果:

// 使用 where 查询
const whereResult = await db.collection('yourCollection').where({
  _id: 'nonExistentId'
}).get();

if (whereResult.data.length === 0) {
  console.log('No document found with where');
} else {
  console.log('Document found with where:', whereResult.data);
}

// 使用 doc 查询
const docResult = await db.collection('yourCollection').doc('nonExistentId').get();

if (!docResult.data) {
  console.log('No document found with doc');
} else {
  console.log('Document found with doc:', docResult.data);
}
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!