首页 > 其他分享 >HydroOJ 从入门到入土(15)批量修改题目标签(tag)

HydroOJ 从入门到入土(15)批量修改题目标签(tag)

时间:2024-04-28 14:36:55浏览次数:30  
标签:sort 15 标签 db HydroOJ field tag 题目

选择还是分支?这是一个 problem。


好消息:搞到了一批题目!

坏消息:题目没有标签

好消息:导入的题目有标签!

坏消息:题目标签和自己的不一样

好消息:标签全部手动改完了!

坏消息:还是觉得第一版好

一、需求

  • 虽然理论上应该是导入之前就把标签全部调整好再导入,但实际上,导入之前调整标签并没有那么容易,而且往往是导入之后才发现标签不一样,为时晚矣。
  • 有时候因为教学水平的增长,看到之前的标签分类不合理,想重新分类的时候,会发现无比棘手。因为分类好改,但是题目数据不跟着分类走,所以新开 oj 时候的分类,更像是一次不能后悔的试错。

二、实现

参考前一篇,直接用 sort 字段(格式为前缀+固定 6 位题号(前边不足补零)+后缀)对范围内的题目批量修改 tag,具体排序跟题库中的排序一致。这个可以直接拿来用。

最终代码如下:

查询范围内题目标签:

db.document.find(
    {
        domainId: "system",
        docType: 10,
        sort: { $gte: "B000001", $lte: "B000005" },
    },
    {
        _id: 0, // Exclude the default _id field from the output
        pid: 1, // Include the pid field
        title: 1, // Include the title field
        tag: 1
    }
)

增加/覆盖范围内题目标签:

db.document.updateMany(
   {
      domainId: "system",
      docType: 10,
      sort: { $gte: "B000001", $lte: "B000005" },
   },
   {
      $set: {
         tag: ["分支","数学"] // Set the tag field to empty array
      }
   }
)

查询范围内题目的某一个标签:

db.document.find(
    {
        domainId: "system",
        docType: 10,
        sort: { $gte: "B000001", $lte: "B000005" },
        tag: "分支" // Match documents where the tag array contains the value "分支"

    },
    {
        _id: 0, // Exclude the default _id field from the output
        pid: 1, // Include the pid field
        title: 1, // Include the title field
        tag: 1
    }
)

替换范围内题目的某一个标签:

db.document.updateMany(
   {
      domainId: "system",
      docType: 10,
      sort: { $gte: "B000001", $lte: "B000005" },
      tag: "分支" // Match documents where the tag array contains the value "分支"
   },
   {
      $set: {
         "tag.$[element]": "选择" // Set the value of "分支" to "选择"
      }
   },
   {
      arrayFilters: [{ "element": "分支" }] // Specify the array filter to target elements with value "分支"
   }
)

删除范围内题目所有标签:

db.document.updateMany(
   {
      domainId: "system",
      docType: 10,
      sort: { $gte: "B000001", $lte: "B000005" },
   },
   {
      $set: {
         tag: [ ] // Set the tag field to empty array
      }
   }
)

三、修改方法

  1. 备份
  2. 进入 db
  3. 输入代码回车看反馈

具体操作请看前一篇

四、注意事项

事先备份!!!

事先备份!!!

事先备份!!!

标签:sort,15,标签,db,HydroOJ,field,tag,题目
From: https://www.cnblogs.com/bowen404/p/18163670

相关文章

  • DataGear 5.0.0 新特性之图表追加更新模式
    DataGear企业版1.1.0已发布!http://datagear.tech/pro/DataGear在新发布的5.0.0版本中,新增了图表追加更新模式支持,包括dgUpdateAppendMode图表选项,以及chart.updateAppendMode()函数,可以非常方便地制作具有追加更新效果的图表,比如实时曲线图、柱状图等。在5.0.0版本之前,......
  • ubuntu18源码安装postgresql15.2数据库
    由于官方的源只能安装到pg10这个版本,整了好一会没有成功就改为源码安装了。下载源代码源码并解压wgethttps://ftp.postgresql.org/pub/source/v15.2/postgresql-15.2.tar.gztar-xfpostgresql-15.2.tar.gzcdpostgresql-15.2/安装C++相关开发库和编译工具aptinst......
  • The 2018 ICPC Asia Qingdao Regional Programming Contest (The 1st Universal Cup,
    Preface久违地VP一场,虽然打的挺唐但勉强写出了8题前中期EFB三开三卡属实有点难受,而且B题这个套路大合集我和徐神两个人写了快200行也占用了一定机时但好在后面把卡住的题慢慢都写出来了,然后最后40min冲刺L题成功比较可惜的是I这个开场看的题没有再细想一步,感觉想到在线段树上D......
  • [题解]P2015 二叉苹果树
    P2015二叉苹果树树形dp,一般用dfs辅助解决。当我们搜索到\(u\),此时剩下\(cnt\)条边可以用,也就是说\(u\)为根节点的子树最多可以保留\(cnt\)条边。由于上一层的需求,我们显然需要枚举剩余边数\(i\)(\(1\leqi\leqcnt\))。接下来对于每个\(i\),我们考虑剩余的\(u\)条边可以怎么放。......
  • 15-项目沟通管理(7/10 十大管理)
    14.1管理基础14.1.1沟通沟通是指用各种可能的方式来发送或接收信息。具体形式包括:书面行驶、口头形式、正式或非正式、手势动作、媒体行驶、遣词造句。14.1.2沟通模型关键要素包括:编码:把思想或想法转化为他人能理解的语言信息和反馈信息媒介噪声解码:把信息还原成有......
  • 洛谷题单指南-动态规划2-P2679 [NOIP2015 提高组] 子串
    原题链接:https://www.luogu.com.cn/problem/P2679题意解读:在a中按顺序挑选k个子串,使得这些子串连在一起正好和b相等,求方案数。解题思路:这样的题目,无外乎两个思路:DFS暴搜(得部分分)、动态规划动态规划不好想,还是先暴搜吧!1、DFS暴搜搜索的思路就是:从a起始位置开始,一直找到跟b前......
  • [题解] [洛谷P4158] 粉刷匠
    [题解][洛谷P4158]粉刷匠题目描述有\(n\)个木板,每个木板有\(m\)个格子,所有格子最开始视为没有颜色。有\(0/1\)两种颜色,每次可以粉刷其中一块木板上一段连续的格子,总共可以粉刷\(t\)次。给出一组目标颜色,问最多可以将多少个格子粉刷成目标颜色。输入格式第一行包含......
  • DataGear 5.0.0 新特性之dgMap图表选项
    DataGear企业版1.1.0已发布!http://datagear.tech/pro/DataGear在新发布的5.0.0版本中,重构了地图类图表,新增了dgMap图表选项,可以更方便灵活地设置图表地图。在5.0.0版本之前,由于没有图表地图选项,无法在新建图表时设置地图,只能在将图表加入看板后,通过看板提供的dg-chart-m......
  • 15_pinctl和gpio子系统
    pinctl和gpio子系统1.什么是pinctrl和gpio子系统?​ pinctrl子系统是用来设置引脚的复用关系和电气属性的,gpio子系统是当pinctrl子系统把引脚的复用关系设置为gpio功能以后就可以使用gpio子系统来操作引脚了,比如引脚的输入输出,高低电平等2.LinuxPinctrl子系统提供的功能是......
  • 【vue3入门】-【15】侦听器
    侦听器我们可以使用watch选项在每次响应式属性发生变化时触发一个函数<template><h3>侦听器</h3><!--不可以被监听,是固定的数据--><p>{{message}}</p><!--可以被监听,只能监听响应式数据(变化的数据)--><button@click="updateHandle">修改数据</button>&l......