uni-app中uniCloud如何设计多对多数据库关系

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

uni-app中uniCloud如何设计多对多数据库关系

uniCloud使用云数据库,如何处理多对多数据表关系

信息类型 信息内容
开发环境 未提及
版本号 未提及
项目创建方式 未提及
1 回复

在uni-app中使用uniCloud设计多对多数据库关系,通常需要通过一个中间表(也称为连接表或关联表)来实现。下面是一个具体的代码案例,展示了如何在uniCloud中设计并实现这种关系。

假设我们有两个实体:User(用户)和Tag(标签),一个用户可以拥有多个标签,一个标签也可以被多个用户使用。

数据库设计

  1. User 表
{
  "bsonType": "object",
  "required": ["_id", "name"],
  "properties": {
    "_id": {
      "bsonType": "objectId"
    },
    "name": {
      "bsonType": "string",
      "description": "用户名称"
    }
  }
}
  1. Tag 表
{
  "bsonType": "object",
  "required": ["_id", "name"],
  "properties": {
    "_id": {
      "bsonType": "objectId"
    },
    "name": {
      "bsonType": "string",
      "description": "标签名称"
    }
  }
}
  1. UserTag 关系表
{
  "bsonType": "object",
  "required": ["userId", "tagId"],
  "properties": {
    "_id": {
      "bsonType": "objectId"
    },
    "userId": {
      "bsonType": "objectId",
      "description": "用户ID"
    },
    "tagId": {
      "bsonType": "objectId",
      "description": "标签ID"
    }
  }
}

代码实现

添加用户与标签关系

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

async function addUserTagRelation(userId, tagId) {
  await db.collection('UserTag').add({
    data: {
      userId,
      tagId
    }
  });
}

// 调用示例
addUserTagRelation('user-object-id', 'tag-object-id').then(() => {
  console.log('关系添加成功');
}).catch(err => {
  console.error('关系添加失败', err);
});

查询用户拥有的标签

async function getUserTags(userId) {
  const result = await db.collection('UserTag')
    .where({
      userId
    })
    .aggregate()
    .lookup({
      from: 'Tag',
      localField: 'tagId',
      foreignField: '_id',
      as: 'tags'
    })
    .unwind('$tags')
    .project({
      _id: 0,
      tag: '$tags.name'
    })
    .end();

  return result.data;
}

// 调用示例
getUserTags('user-object-id').then(tags => {
  console.log('用户拥有的标签:', tags);
}).catch(err => {
  console.error('查询失败', err);
});

以上代码展示了如何在uniCloud中设计并实现多对多关系,包括添加关系和查询关系。注意,实际应用中还需要考虑数据的完整性和一致性,以及错误处理等细节。

回到顶部