我的文档中有一个这样的对象:
revisions: {
<revisionId>: {
...
someProperty: { ... },
},
...
}
我想从someProperty
对象中的每个嵌套对象中删除revisions
(即,遍历所有对象的revisionIdId键)。我问是因为,如果不是我宁愿将其转换为数组,而不是在服务器上进行转换,并可能在此期间覆盖所有更新。
我尝试了$unset
,但我只知道$[]
运算符,该运算符仅适用于数组,例如
$unset: {
'revisions.$[].someProperty': 1
}
谢谢
答案 0 :(得分:1)
您快到了:
{ $unset: { someProperty: "" } }
该值与内存无关
然后您可以使用游标遍历每个文档并删除不需要的属性。
db.collection.find().forEach(<function>)
编辑:对不起,意识到这是一个嵌套模型,其中顶层属性具有任意键,这使其更加棘手。
t.forEach(function( row) {
var newRevisions = [];
row.revisions.fields.forEach( function( revision ){
delete revision.someProperty;
newRevisions.push(revision);
} )
t.update(
{ _id: row._id },
{ "$set": { "revisions": newRevisions} }
);
});
巨大的警告,完全未经测试,但应该为您提供一个起点。