Tenant コレクションがあり、各 Tenant エンティティには TenantLeases 子リストがあります。TenantLease エンティティには MonthlyRent プロパティがあり、その名前を Rent に変更しようとしています。これが私が試したものです:
db.Tenant.update( { "TenantLeases.MonthlyRent": { $exists:true } }, { $rename: { "TenantLeases.MonthlyRent": "TenantLeases.Rent" } }, false, true);
$rename ソース フィールドが無効です
db.Tenant.update( { "TenantLeases.$.MonthlyRent": { $exists:true } }, { $rename: { "TenantLeases.$.MonthlyRent": "TenantLeases.$.Rent" } }, false, true);
$rename ソースは動的配列ではない可能性があります
明らかに $rename は機能しないため、TenantLeases を反復処理して名前を変更しようとしていますが、特定の配列項目を更新する方法がわかりません。
db.Tenant.find().forEach(function(tenant) {
if(tenant.TenantLeases) {
for(var k=0;k<tenant.TenantLeases.length;k++) {
db.Tenant.update( { "TenantLeases." + k + ".MonthlyRent": { $exists:true } }, { $rename: { "TenantLeases." + k + ".MonthlyRent": "TenantLeases." + k + ".Rent" } }, false, false);//gives syntax error
}
}
});