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

MongoDB,如果新值不为null,则更新集合字段

秦经义
2023-03-14

只有当新值不为null时,我才会更新集合设置值。我有这样一个代码

 ...
 var userName = req.body.nome;
 var userSurname = req.body.cognome;
 var userAddress = req.body.indirizzo;

 collection.update(
     {_id:ObjectId(req.session.userID)},
     {$set: { nome: userName, cognome: userSurname, indirizzo: userAddress }}
 )

有没有一个简单的方法可以做到这一点?

另一种方法:如果我可以从我获取数据的表单的占位符中获取值req.body.*,我可以解决这个问题...但是这可能吗?

共有3个答案

武晨
2023-03-14

你不只是要求传递你发布的所有字段吗?那为什么不这样做呢?

(基本上只是剪切和粘贴代码):

collection.update(
    {_id: ObjectId(req.session.userID)},
    {$set: req.body }
)

然后,在更新中设置作为字段发布的任何内容。

请注意,使用set只会覆盖或添加新字段。如果您只想替换整个文档,那么请删除整个{$set:(..)}符号,并作为有效对象传入req body。

东方嘉木
2023-03-14

你可以像下面这个问题一样使用lodash:https://stackoverflow.com/a/33432857/4777292

\u.pickBy({a:null,b:1,c:undefined},\u.identity)

会是

{b:1}

米子轩
2023-03-14

您可以尝试以下方法:

var objForUpdate = {};

if (req.body.nome) objForUpdate.nome = req.body.nome;
if (req.body.cognome) objForUpdate.cognome = req.body.cognome;
if (req.body.indirizzo) objForUpdate.indirizzo = req.body.indirizzo;

//before edit- There is no need for creating a new variable
//var setObj = { $set: objForUpdate }

objForUpdate = { $set: objForUpdate }

collection.update({_id:ObjectId(req.session.userID)}, objForUpdate )
 类似资料:
  • 我正在做一个数据密集的角度项目,在这个项目中,我有一个ng重复,其中许多值每秒更新一次。如果一个值为空,它现在会更新DOM以显示一个空值;这是正确的行为。 需要的解决方案 我想要的是一个过滤器或表达式,当新值为空或NULL时,它不会更新DOM中的值。我相信他们称之为“锁定数据”。 可能的解决方案 我用$watch找到了几个可能的解决方案,但我相信它们不适合ng重复,或者至少效率不高:angular

  • 问题内容: 是否可以在sql中执行更新语句,但仅在更新不同时才执行更新? 例如 如果在数据库中, 不应 执行任何类型的更新 但是,如果 这 应该 执行更新。 问题答案: 使用更新前触发器可以做到这一点。在此触发器中,您可以将旧值与新值进行比较,并在新值不变的情况下取消更新。但这将导致呼叫者网站上的错误。 我不知道为什么要这样做,但是这里有几种可能性: 性能:这里没有性能提升,因为更新不仅需要找到正

  • 问题内容: 我有一张桌子,大约有17个字段。我需要在此表中执行频繁的更新。但是问题是 每次我可能只更新几个字段 。在这种情况下,编写查询以进行更新的最佳方法是什么?我正在寻找一个选项,其中 值仅在不为null时才更新 。 例如,我在数据库Say A,B,C,D中有四个字段。用户更新say D的值。所有其他值保持不变。因此,我需要一个更新查询,该查询仅更新D的值,而其他值保持不变。因此,如果我将a,

  • 有人知道在Mongo3中更新封顶收藏的方法吗。2.我让它在2分钟内工作。我更新了一个收藏,基本上删除了它的所有内容,所以我知道它已经被处理过了。这样就会过时。 当我在3.2中执行同样的操作时,我在命令行上会出现以下错误。 无法更改封顶集合中文档的大小:318!=40 在这里,你可以看到我正在将文档从318字节缩减到40字节。 有办法做到这一点吗?

  • 所以这是我以前在jooq 3.11中工作的查询。 我正在更新一个JSON字段,但是它使用Json绑定映射到我模型中的字符串,我将在下面发布 这在升级到jooq 3.13.2后不再有效。我还不得不将我的sql方言更改为mysql,即使我正在使用mysql 5_7数据库,这可能是问题所在? 我也试过这个,它还是一样的 JsonBinding.class JsonConverter.class 以下是j

  • 问题内容: 我有一个钥匙型课。让我们称为map的实例。 我要添加{ ,}(是的一个实例,并且一)该地图。但是,如果键已经存在,我想求和该映射图中的当前值。 目前我使用 但是在Java 8中是否有一种时髦的方式来做到这一点,例如使用和? 遗憾的是我无法弄清楚。 谢谢。 问题答案: 这就是地图上的合并功能的作用。 这可以进一步减少到 它基本上等于