【问题标题】:Deleting a key/value from existing MongoDB entry从现有 MongoDB 条目中删除键/值
【发布时间】:2012-04-13 18:58:48
【问题描述】:

我需要从特定集合中的每个条目中删除某个键和值。我已经研究过删除,这似乎只适用于整个条目。查看更新,我不相信用 null 或空字符串更新特定键会实现我想要做的事情。我是mongodb的初学者,请原谅我的无知。

长话短说,我该怎么转

{
  "_id" : 1234,
  "name" : "Chris",
  "description" : "Awesome"
}

进入

{
  "_id" : 1234,
  "name" : "Chris"
}

不删除条目并创建一个新条目,或使用任何非 mongodb 命令?谢谢!

【问题讨论】:

标签: mongodb


【解决方案1】:

在呼叫update() 时尝试$unset

像这样:

db.collection_name.update({ _id: 1234 }, { $unset : { description : 1} })

并且,正如vikneshwar 评论的那样,如果您想从所有(或多个)文档中删除一个字段,您可以像这样使用updateMany()

db.collection_name.updateMany({}, { $unset : { description : 1} })

【讨论】:

  • 要更新集合中的所有文档,您可以使用:db.collection_name.update({}, {$unset: { description:1}}, false, true); 最后一个 true 用于多个文档更新
  • 新版本支持更易读的格式:db.example.update({},{$unset: {words:1}}, {multi: true})
  • 要更新所有文档,您可以使用 updateMany 而不是像这样更新 db.collection_name.updateMany({}, { $unset : { description : 1} })
  • 1 在这里做什么?我的意思是只提到键名似乎就足够了。如果没有 -1,则 1 没有任何特定含义。是否有可能有 -1 以及“描述”键?
  • 节省了我的时间 :) 谢谢 Bee San
【解决方案2】:

要引用一个包并删除各种“键”,试试这个

db['name1.name2.name3.Properties'].remove([ { "key" : "name_key1" }, { "key" : "name_key2" }, { "key" : "name_key3" } )]

【讨论】:

    【解决方案3】:

    还可以考虑upsert(),如果_id 不存在,它会将您的行作为新文档插入,或者更新现有文档(如果有)。

    【讨论】:

      猜你喜欢
      • 2022-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-08
      • 2013-04-24
      相关资源
      最近更新 更多