在Firebase中覆盖文档

时间:2019-10-05 15:41:41

标签: javascript firebase google-cloud-firestore

我正在尝试通过存储Google定位服务中getLocation的结果来在Firebase中保存用户位置。

当我使用以下代码时:

Lat_Coordinate = location.getLatitude();
Lon_Coordinate = location.getLongitude();

Map<String, Object> user_location = new HashMap<>();
user_location.put( "Lat", Lat_Coordinate );
user_location.put( "Lon", Lon_Coordinate );

db.collection( "Users" ).document( auth.getUid() ).collection( "Location" ).add( user_location );

它一直在向“位置”集合添加文档。但是,我的目标始终是仅保留一个位置文档,这将是最后的信息。

有没有一种方法可以覆盖已经存在的文档而不是添加一个新文档?

我敢肯定有一种删除集合然后创建一个新集合的方法,但是我认为它的操作太多了。

谢谢

解决方案:

我最终要做的是使用auth.getUID再次创建一个具有已知ID的文档,并将其存储在其中。由于ID始终相同,因此它将覆盖文档:

db.collection( "Users" ).document( auth.getUid() ).collection( "Location" ).document(auth.getUid()).set( user_location );

1 个答案:

答案 0 :(得分:0)

这里的问题是有一个嵌套的坐标集合,每次执行操作都会创建一个新文档

users/uid/location/map

第一个选项是将位置作为文档属性添加到用户文档

db.collection( "Users" ).document( uid ).update("location", map);

以查询为例,可能有理由在嵌套集合中添加位置。为此,您可以通过定义静态文档密钥来实现:

db.collection( "Users" ).document( uid ).collection("location").document("static_key").update("location", map);