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

Upsert未更新现有文档

易风华
2023-03-14

Mongo创建一个新文档,如果它不存在(必须具有1的id)。如果它已经存在,它应该将所有值增加1。但这里的问题是,它每次都会添加另一个文档,而不是更新已经存在的文档。

const query = {
        id: 1,
        customer: {
            worth: 0
        }
    },
    update = { id: 1, $inc: 
        { 
            'customer.worth': 1
        } 
    },
    options = { upsert: true };

Model.findOneAndUpdate(query, update, options)
    .catch(err => console.log(err));

如果文档已经存在,我如何增加值1,而不是每次添加另一个文档?在任何给定的时间,我只想要一个文档。

共有1个答案

况唯
2023-03-14

由于upsert标志,您的查询似乎正常并在更新期间插入

可选。如果设置为true,则在没有文档符合查询条件时创建新文档。默认值为false,当找不到匹配项时,该值不会插入新文档。

读留档

以下查询对我有效

db.getCollection('test').findOneAndUpdate({
        "id" : 1,
        "customer" : {
            "worth" : 0
          }  
        }, {
          $inc: {
            'customer.worth': 1
          }
        })
    
 类似资料:
  • 问题内容: 我已经查看了网站上的一些问题,但还没有弄清楚我在做什么错。我有一些这样的代码: 我不确定在中间应该做什么以使其正确更新数据库。我已经尝试了很多东西,但是无法撤消以找出所有我尝试过的东西。我一整夜都花了时间,我希望它能正常工作。 这几乎是我想要的,我想知道是否有任何方法可以在条件部分 我会继续玩弄它。 问题答案: 这正是我想要的,只有一行。:D完美!

  • 和都属于类型或任何其他数字数据类型。是我的PK。 现在,我希望在表中执行更新查询,如果该行不存在,我希望插入该行。如果用户已经存在,我希望将点数增加1,否则插入用户ID,点数默认为1。 我知道我可以这样做: 但是,在我的情况下,更新操作比插入新行更频繁。假设每天有5000个查询,其中大约4500行是对现有行的操作。做相反的upsert将是更有利的,因为冲突将减少到500次,而不是4500次。我想先

  • 问题内容: MySQL有这样的东西: 据我所知,SQLite中不存在此功能,我想知道的是,是否有任何方法可以实现相同的效果而不必执行两个查询。另外,如果这不可能,那么您更喜欢什么: SELECT +(插入或更新) 或 UPDATE( 如果UPDATE失败,则 + INSERT ) 问题答案: 由于3.24.0 SQLite还支持upsert ,因此现在您可以简单地编写以下内容

  • 可写CTE被认为是9.5之前UPSERT的一种解决方案,如在PostgreSQL中重复更新时插入所述? 可以使用以下可写CTEs惯用语执行UPSERT,其中包含的信息是作为更新还是插入结束的: 此查询将返回“更新”或“插入”,或者可能(很少)失败,违反了https://dba.stackexchange.com/questions/78510/why-is-cte-open-to-lost-upd

  • 问题内容: MySQL有这样的东西: 据我所知,SQLite中不存在此功能,我想知道的是,是否有任何方法可以实现相同的效果而不必执行两个查询。另外,如果这不可能,那么您更喜欢什么: SELECT +(插入或更新) 或 UPDATE( 如果UPDATE失败,则 + INSERT ) 问题答案: 因为3.24.0 SQLite还支持upsert ,所以现在您可以简单地编写以下内容

  • 我已经在做我的项目好几个星期了。一切都很好。但今天突然间,我无法加载我更改的一些视图(有些视图可以更改并得到结果)。即使我更换了控制器,它现在仍然工作。根据SO和其他一些网站,我尝试了以下内容 重新启动浏览器 我错过了什么。提前谢谢。