我在MongoDB中有一个名为CrawlUser的集合.它有一个名为CrawlStatuses的列表,它是CrawlStatus对象的列表.CrawlStatus有一个名为LastErrorMessage的属性,我想从集合中删除它.
我尝试执行以下操作以删除它但它不起作用...没有给出错误消息,但LastErrorMessage列仍然存在.
db.CrawlUser.update( {}, { $unset: { "CrawlStatuses.LastErrorMessage": 1 } }, false, true);
Run Code Online (Sandbox Code Playgroud)
我有什么想法我做错了吗?
另一个相关的问题,如果我在一个非常大的集合(数百万行)的列上执行$ unset命令,mongodb会占用服务器上的所有ram(就像它试图将整个集合存储在内存中一样) ),然后服务器崩溃.有大量集合时是否有更好的方法可以删除列?
Ale*_*scu 13
使用空参数的更新似乎不起作用.我在mongo shell和mongoconsole中尝试过它.在mongoconsole中,它给出了关于更新的错误,期望第一个参数是数组或对象.
但是,您可以使用$ exists find查询执行相同的操作.
尝试:
`db.CrawlUser.update( {CrawlStatuses:{$exists:true}}, { $unset: { "CrawlStatuses.LastErrorMessage": 1 } }, false, true);`
Run Code Online (Sandbox Code Playgroud)
这对我有用.
请记住,基于文档,$ exists不使用索引,因此它会更慢.我建议添加一个可以添加索引的参数,并在执行$ unset时查询它.