我正在尝试通过存储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 );
答案 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);