mongodb - 如何从子集合中删除列

标签 mongodb unset

我在 MongoDB 中有一个名为 CrawlUser 的集合。它有一个名为 CrawlStatus 的列表,它是 CrawlStatus 对象的列表。 CrawlStatus 有一个名为 LastErrorMessage 的属性,我想从集合中删除它。

我尝试执行以下操作将其删除,但没有成功...没有给出错误消息,但 LastErrorMessage 列仍然存在。

db.CrawlUser.update( {}, { $unset: { "CrawlStatuses.LastErrorMessage": 1 } }, false, true);

任何想法我做错了什么?

另一个相关问题,如果我对一个非常大的集合(数百万行)中的列执行 $unset 命令,mongodb 会用完服务器上的所有内存(好像它试图存储整个内存中的集合),然后服务器崩溃。当您拥有大量集合时,有没有更好的方法来删除列?

最佳答案

使用空参数的更新似乎不起作用。我在 mongo shell 和 mongoconsole 中尝试过。在 mongoconsole 中,它给出了一个关于更新期望第一个参数是数组或对象的错误。

但是,您可以使用 $exists 查找查询来执行相同的操作。

试试:

`db.CrawlUser.update( {CrawlStatuses:{$exists:true}}, { $unset: { "CrawlStatuses.LastErrorMessage": 1 } }, false, true);`

这对我有用。

请记住,根据文档,$exists 不使用索引,因此它会更慢。我建议添加一个参数,您可以在其上添加索引并在执行 $unset 时对其进行查询。

关于mongodb - 如何从子集合中删除列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4987289/

相关文章:

java - 如何从数组中删除文档?

python - MongoDB - 如何将 ObjectId 和日期时间显示为字符串(使用 bson.json_util)

mongodb - 将用户从 Firebase 迁移到 MongoDB

python - 如何通过 python 跟踪来自特定城市的推文并存储在 MongoDB 中?

javascript - Mongoose JS 关系

arrays - 按内容(存储在变量中)从 bash 数组中删除元素而不留下空白槽

php - unset() 静态变量不起作用?

bash - 使 nameref 成为 bash 中的常规变量

PHP foreach删除数组元素

python - 从文本文件解析日期/时间时如何考虑夏令时?