mongodb更新查询删除命令中指定的字段以外的所有数组字段

Posted

技术标签:

【中文标题】mongodb更新查询删除命令中指定的字段以外的所有数组字段【英文标题】:Mongodb Update Query Deletes All Array Fields Except Field Specified in Command 【发布时间】:2013-07-16 17:18:33 【问题描述】:

我正在使用 Node、MongoDB 和 Mongoose。我检查了 set 和 update 上的 MongoDB 文档。我已经用谷歌搜索了一个多小时,我发现了围绕我的问题跳舞的主题,但没有确定的。 下面的查询更新了正确的字段,但它也完全删除了数组中我没有指定的其他字段。

db.posts.update( 
   "_id" :  $exists : true   ,
   $set :  userCreated :  "time" : new ISODate("2013-07-11T03:34:54Z")   ,
  false,
  true
)

这是我要修改的架构部分:

,
userCreated: 
  id:  type: mongoose.Schema.Types.ObjectId, ref: 'User' ,
  name:  type: String, default: '' ,
  time:  type: Date, default: Date.now 
,

这就是结果:

,
"userCreated": 
  "time":  ISODate("2013-07-11T03:34:54Z") 
,

【问题讨论】:

【参考方案1】:

您可以使用点表示法更新userCreatedtime 属性并保留其他属性:

db.posts.update( 
   "_id" :  $exists : true   ,
   $set :  "userCreated.time" : new ISODate("2013-07-11T03:34:54Z")  ,
  false,
  true
)

【讨论】:

以上是关于mongodb更新查询删除命令中指定的字段以外的所有数组字段的主要内容,如果未能解决你的问题,请参考以下文章

如何让红移为复制命令中指定的字段添加当前时间

如果满足另一个中指定的条件,则更新查询在其中一个中更新数据

在构建 Java GraphQL API 时,如何避免从数据库中过度获取(即仅获取查询中指定的字段)?

sql怎么样删除表中指定字段以外的所有字段

mongodb 没有则插入,有则更新其中某列

如何使用多个条件查找查询在 MongoDB 中指定字段?