我需要更新集合中的字段名称。问题在于所讨论的字段在数组内。因此,我正在尝试确定执行此操作的正确方法。我试图这样做以完成对“计划”数组中存在的字段的重命名::
db.customers.updateMany( {}, { $rename: { "plans" : { "subscriptionType": "membershipType" } } } );
但是这行不通。处理数组中字段的这种转换的正确方法是什么?
数据如下:
{
_id: 123,
prop1: value,
prop2: value,
prop3: value,
plans: [
subscriptionType: value,
otherProp: value,
otherProp: value
]
}
答案 0 :(得分:1)
您可以使用Aggregation Framework的$addFields覆盖PFCloud.callFunction(inBackground: "MyCloudFunc", withParameters: []) { (result, error) in
guard let jsonString = result as? String else { return }
guard let data = jsonString.data(using: String.Encoding.utf8) else { return }
guard let response = try? JSONDecoder().decode(MyDecodableStruct.self, from: data) else { return }
// DO SOMETHING WITH RESULT.
}
字段,并使用$map运算符重命名数组中的字段。然后,您可以使用$out覆盖现有集合:
Dictionary
或者,您可以动态地执行此操作。在此解决方案中,您不必显式指定其他字段名称:
Data
使用$objectToArray至$filter淘汰旧的键/值对,并使用$mergeObjects将过滤后的对象与新的重命名字段组合在一起。