当前位置: 首页 > 知识库问答 >
问题:

如何在addToSet运算符中指定用于确定要添加的文档是否重复的键?

姬歌者
2023-03-14

我正试图通过添加文档来使用addToSet运算符。根据mongo文件;

如果该值是一个文档,则如果数组中的现有文档与要添加的文档完全匹配,MongoDB将确定该文档是重复的;即,现有文档具有完全相同的字段值,并且字段的顺序相同。因此,字段顺序很重要,您不能指定MongoDB只比较文档中字段的子集来确定文档是否与n个现有数组元素重复

对此有变通办法吗?。问题是要比较的文档有两个字段,filename和base64表示的file。由于base64字符串太大,文件比较会太重。mongoDB在这方面会有效吗?有没有一种方法可以告诉addToSet只根据文件名进行比较?否则,我应该只获取数据集并在服务器程序中进行比较吗?

共有1个答案

游鸣
2023-03-14

如果将元数据和文件内容捆绑在同一(子)文档中,则可能会出现此模式的其他问题。

但是,为了给出与所提供的信息相称的答案,可以使用https://docs.mongodb.com/manual/reference/operator/aggregation/concatarrays/在表达式中构造新的数组,并且可以使用https://docs.mongodb.com/manual/reference/operator/aggregation/cond/有条件地这样做。您需要在$cond下执行查询,然后在其中一个分支中构造新的数组,否则使用现有的数组。这是一个相当大的输入量,但应该达到你要求做的事情。

 类似资料:
  • 我想知道一些事情,我有这个数据框 在特定领域 然后我想在指定的日期添加vline,我试试这个代码 但它显示将值转换为轴单位失败的错误。当我不插入“、0600”时,它会显示缺失的值xmax、ymax。我错过什么了吗?

  • 我正在收集一些指标,并希望基于进行聚合。 您认为我们应该关注的所有服务中的前五大(或更多或更少)运营是什么?或 个人服务是否有前5名(或更多或更少)?如果是,你能列出它们吗 提前感谢。

  • 我试图使用反射来确定传入类是否实现了接口: 这是确定这一点的最佳/最有效的方法吗?我还看到一个

  • 我的模式是 在这个模式中,“uid”代表用户标识符,而“答案”数组存储学生回答的答案。在每个答案中,qid与问题ID相关,“内容”是学生的真实答案,“时间”是答案的修改时间戳。 在这里,我使用mongoose将新答案插入到数组中 一般来说,通过使用addToSet命令,应答数组中的元素应该是唯一的,但在我的示例中,应答数组只能有多个相同的嵌入文档,除了每个嵌入文档都有一个唯一的OjbectId\u

  • 本文向大家介绍如何确定输入字符串是否在JSP中以指定的后缀结尾?,包括了如何确定输入字符串是否在JSP中以指定的后缀结尾?的使用技巧和注意事项,需要的朋友参考一下 的FN:的endsWith()函数确定与一个指定的后缀的输入串的端部。 语法 该FN:的endsWith()函数的语法如下- 示例 以下示例说明了fn:substring函数的功能- 您将收到以下结果-

  • 我需要检查堆栈中是否有重复项(仅在基本方法pop、push、top、isempty中使用),如果堆栈没有重复项,则返回true;如果堆栈为空,则返回true;如果堆栈有重复项,则返回false 如果不使用另一个函数和最短路径,我如何做到这一点?解决方案需要使用基本方法,而不使用c的内置函数#