我在 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/