我有一个包含嵌入式子文档的文档对象。 要清除"清除"子文件,我试试这个:
obj.mysub = {};
obj.save();
这不起作用,我的对象仍然有mysub子文档的内容。 但是这个:
obj.mysub = undefined;
obj.save();
这确实有效,它会从对象中删除我的子文档。
我的问题是为什么第一个版本不起作用?在第一个例子中,Mongodb / Mongoose发生了什么?
[edit]为什么在上面的第一个例子中没有保存空对象。
答案 0 :(得分:0)
Mongoose有点“保护”你免受很多逻辑的影响,就像你已经在它自己的内部解决方案中提出的那样。因此,如果您确实需要执行此操作,请在较低级别对驱动程序执行此操作,如下所示:
YourModel.update(
{ /*statement matching your document as a query */ },
{ "$unset": { "mysub": 1 } }
)
根据正常的MongoDB逻辑,这将工作并删除所选文档中的该级别。有关详情,请参阅$unset
运算符。