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

仅当某些属性与任何当前文档不匹配时插入文档(通过upsert?)

贺功
2023-03-14

在MongoDB中是否有插入不包含某些属性的新文档的方法?

例如,假设我想插入一个文档,它看起来像:

{
    'f_name': 'Jim',
    'l_name': 'Jones',
    'age': 21,
    'country': 'UK',
    ...etc...
}

但是我想插入这个文档,只有当一个文档包含

{
    'f_name': 'Jim',
    'l_name': 'Jones'
}

还不存在。是否有一种方法可以在单个操作中完成此操作(例如,像upsert一样,但不修改任何现有的匹配文档(如果存在),或者必须在两个单独的操作中完成此操作(查找以查看是否存在,然后插入)?

这并不重要,但了解它会非常有用,并且可以节省很多时间!

共有1个答案

季凡
2023-03-14

您可以使用以下两个选项之一:

>

db.col.update({f_name:“吉姆”,l_name:“琼斯'}, {//你的医生在这里},{uprett: true})

这将基本上搜索一个文档,其中这些字段已经有了这些值和更新(您可以只更新具有相同值的字段),或者如果查找条件不返回结果,则搜索插入。

最后一次尝试是使用两个查询,但是上面的upsert应该可以很好地工作。

 类似资料:
  • 我试图实现的很简单。只有当数据库不存在时,我才需要在数据库中创建一个用户条目。 应用程序流程: 使用Firebase身份验证(获取UID)创建用户 客户端代码(创建操作): firestore规则: 附加信息: 正如您可能已经知道的那样,代码不起作用。每次我运行客户端代码时,当前用户都会被一个新文档完全替换。但是,如果我从规则中删除以下行,一切都会正常工作: 但现在问题来了,如何保护用户文档中的数

  • 我有一个具有以下模式的用户集合: 用户将查找用户。名称,必须是唯一的。添加新用户时,我首先执行搜索,如果没有找到这样的用户,我会将新用户文档添加到集合中。搜索用户和添加新用户(如果未找到)的操作不是原子操作,因此,当多个应用程序服务器连接到DB服务器时,可能会同时收到两个具有相同用户名的添加用户请求,从而导致两个添加用户请求都找不到这样的用户,这反过来会导致两个文档具有相同的“user.name”

  • 我有以下文件在蒙戈收藏- 我想将此文档添加到Mongo,只有当具有,和值的类似文档中不存在时。 如果确实存在类似的文档,我希望仅更新timesSeen(递增1)和lastSeen(设置今天的日期)值。 这样做的正确和最有效的方法是什么?我是否可以使用一个命令来执行此操作,而无需在之前搜索相关文档并插入新文档/根据该命令更新现有文档

  • 问题内容: 我正在尝试将文档插入Node.js中的MongoDB中。我已经从数据库中成功读取了文件,并通过命令行界面添加了文档。但是,我无法从JavaScript插入文档。如果这样做,我会收到一个错误: 错误:没有提供的回调无法使用writeConcern 这是我的代码: 我无法终生弄清楚为什么会出现此错误。 我做错了什么,我应该怎么做呢? 问题答案: 您需要为调用提供回调函数,以便该方法可以将插

  • 我有一个字符串列表,上面有一周中几天的日期。 我的目标是能够找到属于某个星期的几个文档。比较字段为“第一天”。 遵循数据库中文档结构的图像: 但是搜索没有找到任何文件。预计查询数量将为35。 我想知道是否有任何方法可以通过给定的文档字段找到文档,匹配arraylist中的任何项。

  • 给定一个带有术语过滤器的过滤查询,有没有办法确定过滤器中的哪些术语与没有文档匹配?换句话说,确定过滤器中的冗余术语? 或者,是否可以指定一个聚合来计算过滤器术语的匹配项,而不是匹配文档中的唯一术语?