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,而不是每次添加另一个文档?在任何给定的时间,我只想要一个文档。
由于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和其他一些网站,我尝试了以下内容 重新启动浏览器 我错过了什么。提前谢谢。