uni-app uniCloud联合查询时没有返回预期结果

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

uni-app uniCloud联合查询时没有返回预期结果

产品分类: uniCloud/支付宝小程序云

示例代码:

demo-classify.schema.json

{  
    "bsonType": "object",  
    "required": [],  
    "permission": {  
        "read": true,  
        "create": true,  
        "update": true,  
        "delete": true  
    },  
    "properties": {  
        "_id": {  
            "description": "ID,系统自动生成"  
        },  
        "name": {  
            "title": "分类明细",  
            "bsonType": "string"  
        }  
    }  
}

demo-classify.init_data.json

[  
    {  
        "name": "可爱萌宠"  
    },  
    {  
        "name": "明细美女"  
    }  
]

demo-wallpaper.schema.json

{  
    "bsonType": "object",  
    "required": [],  
    "permission": {  
        "read": true,  
        "create": true,  
        "update": true,  
        "delete": true  
    },  
    "properties": {  
        "_id": {  
            "description": "ID,系统自动生成"  
        },  
        "picurl": {  
            "title": "壁纸链接地址",  
            "bsonType": "string"  
        },  
        "description": {  
            "title": "壁纸描述",  
            "bsonType": "string"  
        },  
        "classid": {  
            "title": "分类ID",  
            "bsonType": "string",  
            "foreignKey": "demo-classify._id"  
        }  
    }  
}

demo-wallpaper.init_data.json

[  
    {  
        "picurl": "https://cdn.qingnian8.com/public/xxmBizhi/20240726/1721962301068_0_small.webp",  
        "description": "动漫女孩绘画。图源:wallhaven.cc@HiguchiMadokaS",  
        "classid": "67440ffcded73e34897288a0"  
    },  
    {  
        "picurl": "https://cdn.qingnian8.com/public/xxmBizhi/20241024/1729750258702_2_small.webp",  
        "description": "杨幂绝美活动造型释出,亮闪开衩礼服尽显玲珑身材,女王霸气十足。图源:微博@杨幂工作室",  
        "classid": "67440ffcded73e34897288a1"  
    },  
    {  
        "picurl": "https://cdn.qingnian8.com/public/xxmBizhi/20240318/1710770064235_3_small.webp",  
        "description": "永远的七龙珠,童年的回忆,神龙显现。图源:微博@每阅壁纸",  
        "classid": "67440ffcded73e34897288a0"  
    }  
]

操作步骤:

db.collection("demo-wallpaper", "demo-classify").get();

预期结果:

[
    {
        "_id": "67443fbdc0bd20b1cfe261a8",
        "classid": [
            {
                "_id": "67440ffcded73e34897288a0",
                "name": "可爱萌宠"
            }
        ],
        "description": "动漫女孩绘画。图源:wallhaven.cc@HiguchiMadokaS",
        "picurl": "https://cdn.qingnian8.com/public/xxmBizhi/20240726/1721962301068_0_small.webp"
    },
    {
        "_id": "67443fbdc0bd20b1cfe261a9",
        "classid": [
            {
                "_id": "67440ffcded73e34897288a1",
                "name": "明星美女"
            }
        ],
        "description": "杨幂绝美活动造型释出,亮闪开衩礼服尽显玲珑身材,女王霸气十足。图源:微博@杨幂工作室",
        "picurl": "https://cdn.qingnian8.com/public/xxmBizhi/20241024/1729750258702_2_small.webp"
    },
    {
        "_id": "67443fbdc0bd20b1cfe261aa",
        "classid": [
            {
                "_id": "67440ffcded73e34897288a0",
                "name": "可爱萌宠"
            }
        ],
        "description": "永远的七龙珠,童年的回忆,神龙显现。图源:微博@每阅壁纸",
        "picurl": "https://cdn.qingnian8.com/public/xxmBizhi/20240318/1710770064235_3_small.webp"
    }
]

实际结果:

[
    {
        "_id": "67443fbdc0bd20b1cfe261a8",
        "classid": [
            {
                "_id": "67440ffcded73e34897288a0",
                "name": "可爱萌宠"
            },
            {
                "_id": "67440ffcded73e34897288a1",
                "name": "明星美女"
            },
            {
                "_id": "674440ff841b9edfc93e5e67",
                "name": "分类测试2"
            }
        ],
        "description": "动漫女孩绘画。图源:wallhaven.cc@HiguchiMadokaS",
        "picurl": "https://cdn.qingnian8.com/public/xxmBizhi/20240726/1721962301068_0_small.webp"
    },
    {
        "_id": "67443fbdc0bd20b1cfe261a9",
        "classid": [
            {
                "_id": "67440ffcded73e34897288a0",
                "name": "可爱萌宠"
            },
            {
                "_id": "67440ffcded73e34897288a1",
                "name": "明星美女"
            },
            {
                "_id": "674440ff841b9edfc93e5e67",
                "name": "分类测试2"
            }
        ],
        "description": "杨幂绝美活动造型释出,亮闪开衩礼服尽显玲珑身材,女王霸气十足。图源:微博@杨幂工作室",
        "picurl": "https://cdn.qingnian8.com/public/xxmBizhi/20241024/1729750258702_2_small.webp"
    },
    {
        "_id": "67443fbdc0bd20b1cfe261aa",
        "classid": [
            {
                "_id": "67440ffcded73e34897288a0",
                "name": "可爱萌宠"
            },
            {
                "_id": "67440ffcded73e34897288a1",
                "name": "明星美女"
            },
            {
                "_id": "674440ff841b9edfc93e5e67",
                "name": "分类测试2"
            }
        ],
        "description": "永远的七龙珠,童年的回忆,神龙显现。图源:微博@每阅壁纸",
        "picurl": "https://cdn.qingnian8.com/public/xxmBizhi/20240318/1710770064235_3_small.webp"
    }
]

bug描述:

在schema文件中,对字段指定外键foreignKey,进行关联查询。查询出关联表的所有数据,并不是关联字段值对应的数据。


6 回复

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


+1,我也遇到了这个问题,一直以为自己写错了,我记得我上一个项目用阿里云空间的时候没有这个情况

现在还有这个问题吗?

回复 DCloud_uniCloud_CRL: 我这也有这种问题,

回复 k***@163.com: 支付宝云正在修复

在使用uni-app结合uniCloud进行联合查询时,如果未能返回预期结果,可能是由多种原因导致的。以下是一个示例代码案例,展示了如何进行联合查询,并包含了一些可能导致问题的排查方向。

示例代码

假设我们有两个集合:usersordersusers 集合存储用户信息,orders 集合存储订单信息,且每个订单都关联一个用户ID。

数据库结构

  • users 集合:

    [
      {"_id": "user1", "name": "Alice"},
      {"_id": "user2", "name": "Bob"}
    ]
    
  • orders 集合:

    [
      {"_id": "order1", "user_id": "user1", "amount": 100},
      {"_id": "order2", "user_id": "user2", "amount": 200}
    ]
    

联合查询代码

在uniCloud云函数中,我们可以使用以下代码进行联合查询:

const db = uniCloud.database();
const _ = db.command;

exports.main = async (event, context) => {
  try {
    const userOrders = await db
      .collection('orders')
      .aggregate()
      .lookup({
        from: 'users',
        localField: 'user_id',
        foreignField: '_id',
        as: 'userInfo'
      })
      .end();

    return {
      code: 0,
      data: userOrders.data
    };
  } catch (error) {
    return {
      code: -1,
      msg: error.message
    };
  }
};

排查方向

  1. 检查集合和字段名:确保集合名称和字段名称正确无误,包括大小写。

  2. 数据格式:确认集合中的数据类型与查询中使用的类型一致,例如ID字段是否为字符串类型。

  3. 权限设置:检查云数据库的权限设置,确保当前用户或云函数有足够的权限访问这两个集合。

  4. 查询条件:如果查询中使用了条件筛选,检查条件是否正确。例如,如果orders集合中有额外的筛选条件,确保这些条件不会排除预期的结果。

  5. 结果处理:检查对返回结果的处理逻辑,确保正确地解析了联合查询的结果。例如,userInfo字段是一个数组,需要遍历处理。

  6. 日志调试:在云函数中增加日志输出,可以帮助定位问题发生的具体位置。

通过以上代码和排查方向,你应该能够定位并解决uni-app结合uniCloud进行联合查询时未返回预期结果的问题。如果问题依旧存在,建议详细检查数据库日志或联系uniCloud的技术支持。

回到顶部