腾讯云开发 CloudBase 找到父项和子项之间所拥有的某个同名属性的最大的值

本文介绍了如何在处理菜单数据时,确保子项和父项ID的唯一性,通过使用MongoDB的聚合操作动态获取最大ID,以便在添加新菜单时自动递增ID值。
摘要由CSDN通过智能技术生成

 在比如说做菜单数据的时候,我会把菜单的子项放到children属性中,然后菜单的父项和子项的id需要做一个手动自增的效果,也就是所有不管是父项还是子项,他们id属性的值都是唯一的,父项的id和子项的id不能重复。如:

{
    "id":1,
    "name":"首页",
    "children":[
        {
            "id":2,
            "name":"统计"
        },
        {
            "id":3,
            "name":"统计"
        }
    ]
}
{
    "id":4,
    "name":"客户管理",
    "children":[
        {
            "id":5,
            "name":"客户管理"
        },
        {
            "id":6,
            "name":"用户地址"
        }
    ]
}
{
    "id":7,
    "name":"系统设置",
    "children":[
        {
            "id":8,
            "name":"菜单管理"
        },
        {
            "id":9,
            "name":"权限管理"
        }
    ]
}
// 每个id相互之间都是唯一的
// 这里的数据看起来是有序的,但实际系统操作中,id的生成往往是无序的

 当我们管准备添加新的菜单数据的时候,就有可能需要手动获取最大值,并且在添加吓一条菜单数据时让他的id根据最大值+1,防止重复,获取的方法如下:

        const cloudbase = require('@cloudbase/node-sdk');
        const app = cloudbase.init({
          env: cloudbase.SYMBOL_CURRENT_ENV,
        });

        const db = app.database();
        const collection = db.collection('menuList')
        const _ = db.command;
        const $ = _.aggregate;
        const res = await collection.aggregate().project({
            // 先把子项id的最大值和父项的id放到同一级
            id:true,
            childrenMax:$.max("$children.id")
        }).project({
            // 比较每一个菜单中子项id和父id的大小,返回他们之中最大的哪个
            maxId:$.cond({
                if: $.gte(['$id', '$childrenMax']),
                then: '$id',
                else: '$childrenMax'
            })
        }).group({
            // 把所有元素当成一组数据,找到这组数据中id最大的值并返回给maxId
            // group需要传入一个_id,并且最终根据这个id进行分组,把_id写成常量就代表所有数据都是一组的,以便统计里面的最大maxId值
            _id: 1, 
            maxId: $.max('$maxId')
        }).end();
        const maxId = res.data[0].maxId;
        
        // res.data打印结果格式为
        // {_id:1,maxId: 9}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值