使用MongoVUE从MongoDB中的集合中删除特定的子文档

时间:2011-10-09 08:40:15

标签: mongodb mongovue

使用MongoVUE从文档中删除“密钥”很简单 - 只需在查看模式下右键单击并选择“删除”。

但是,如果要从集合中删除整个子文档,似乎不存在这样的选项。

有没有人知道是否有一种快速/简单的方法可以使用GUI从集合中删除子文档?(即不诉诸查询)

2 个答案:

答案 0 :(得分:4)


这有点棘手,因为只需点击GUI就无法删除整个集合的密钥。 选择要删除密钥的集合,然后单击“更新”按钮。现在mongoVUE将显示更新视图。
在“输入查找Json”面板中,您必须输入以下代码:
{ "keyToDelete": { $exists : true } }

在另一个面板'Enter Update Json'中输入以下内容:
{ $unset : { "keyToDelete" : 1} }

现在点击“更新”按钮运行查询,“keyToDelete”键不再出现在所选集合中。

到目前为止 hiroorih

答案 1 :(得分:2)

这确实很棘手,特别是对于像我这样的MongoDB(和JSON)新手。我也试图从MongoVUE删除特定的子文档,但我无法弄清楚如何。最后我找到了解决方案,我想在这里分享,以防其他人遇到同样的问题。

我有这个文件(用户):

{
  "_id" : ObjectId("510d3e719d0d3627ec73abe4"),
  "Name" : "John Doe",
  "Country" : "USA",
  "Highscores" : [{
      "Score" : 15,
      "DateStamp" : ISODate("2013-02-02T11:35:51.905Z")
    }, {
      "Score" : 19,
      "DateStamp" : ISODate("2013-02-02T11:36:04.886Z")
    }, {
      "Score" : 40,
      "DateStamp" : ISODate("2013-02-02T11:36:21.714Z")
    }]
}

我想删除20以上的分数,即只删除最后一个高分,并将列表留下两个子文档。我可以通过此查询找到我的文档(整个用户文档):

{ "Highscores.Score": { $gt: 20 } }

但是如果我在MongoVUE中打开一个删除窗口并输入搜索查询,它将删除整个用户,包括所有高分。我无法获取$ unset来删除子文档,经过一些搜索,我发现这个更新JSON是关键:

{ $pull : { Highscores : { Score : { $gt: 20 } } } }

希望它有所帮助!