Android端Firestore如何为嵌套对象添加新字段?
给Firestore嵌套对象添加新字段的实现方法
其实方法比你想的简单——Firestore的点路径符号(dot notation)不仅能更新已存在的嵌套字段,还能直接用来给嵌套对象添加全新的字段,和你更新已有字段的语法几乎一样。
直接使用点路径添加新字段
你只需要把新字段的完整路径(父对象.新字段名)作为update()方法的键,指定对应的值就可以了。比如要给favorites添加code字段,代码可以这么写:
// 给favorites对象新增code字段,值为32 db.collection("users").document("frank") .update("favorites.code", 32);
执行这段代码后,你的文档结构就会变成:
{ "name": "Frank", "favorites": { "food": "Pizza", "color": "Blue", "subject": "recess", "code": 32 }, "age": 12 }
同时更新已有字段+添加新字段
如果需要同时做更新已有字段和添加新字段的操作,只需要把多个键值对传入update()方法即可,完全不冲突:
// 同时更新age为13,修改favorites.color为Red,给favorites新增code字段 db.collection("users").document("frank") .update( "age", 13, "favorites.color", "Red", "favorites.code", 32 );
用Map批量操作(更灵活的方式)
如果需要操作多个字段,也可以用Map来组织更新内容,写法更清晰:
Map<String, Object> updates = new HashMap<>(); updates.put("age", 12); updates.put("favorites.code", 32); db.collection("users").document("frank") .update(updates);
原理说明
Firestore会自动识别点路径对应的层级:如果路径中的父对象(比如这里的favorites)已经存在,就会在它下面新增指定的字段;如果父对象不存在,还会自动创建这个嵌套对象(不过你的场景里favorites已经存在,所以不用担心这个)。而且这种方式只会修改指定的字段,不会覆盖嵌套对象里的其他已有属性。
内容的提问来源于stack exchange,提问作者Asif Mushtaq
相关产品推荐
相关产品推荐

