gpt4 book ai didi

Mongodb upsert 只更新选中的字段,但是全部插入

转载 作者:IT老高 更新时间:2023-10-28 13:14:27 36 4
gpt4 key购买 nike

我正在尝试在 MongoDB 中使用 upsert 来更新文档中的单个字段(如果找到)或插入一个包含大量字段的全新文档。问题在于,在我看来,MongoDB 要么替换每个字段,要么在其 upsert 操作中插入字段的子集,即它不能插入比它实际想要更新的更多的字段。

我想做的是:

  • 我查询单个唯一值
  • 如果文档已存在,则仅将时间戳值(我们称之为“lastseen”)更新为新值
  • 如果文档不存在,我将添加一长串不同的键/值对,这些键/值对应在其剩余生命周期内保持静态。

让我们举例说明:

根据我的理解,如果找到“name”,此示例将更新“lastseen”日期,但如果未找到“name”,它将仅插入“name”+“lastseen”。

db.somecollection.update({name: "some name"},{ $set: {"lastseen": "2012-12-28"}}, {upsert:true})

如果我向第二个参数添加更多字段(键/值对)并删除 $set,那么每个字段都会在更新时被替换,但在插入时会产生预期的效果。是否有类似 $insert 或类似的东西只在插入时执行操作?

所以在我看来,我只能得到以下之一:

  • 正确的更新行为,但如果文档不存在,将插入仅包含所需字段子集的文档
  • 正确的插入行为,但如果文档已存在,则会覆盖所有现有字段

我的理解正确吗?如果是这样,是否可以通过一次操作来解决?

最佳答案

MongoDB 2.4 有 $setOnInsert

db.somecollection.update(
{name: "some name"},
{
$set: {
"lastseen": "2012-12-28"
},
$setOnInsert: {
"firstseen": <TIMESTAMP> # set on insert, not on update
}
},
{upsert:true}
)

关于Mongodb upsert 只更新选中的字段,但是全部插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14069897/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com