【问题标题】:Overwriting document in firebase覆盖firebase中的文档
【发布时间】:2019-10-05 15:41:41
【问题描述】:

我正在尝试通过存储来自谷歌位置服务的 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 );

它不断将文档添加到 Location 集合中。但是,我的目标始终是只保留一份位置文件,这将是最后的信息。

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

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

谢谢

解决方案:

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

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

【问题讨论】:

  • 您不需要嵌套位置,然后只需在内部使用属性或在嵌套位置内使用具有固定文档 ID 的文档
  • 是的,这就是我所做的,只是添加了一个带有 auth.getUid 的文档。谢谢
  • @cutiko 您是否想提供一个稍微更广泛的相同信息版本作为答案,以便我们对其进行投票(Ben 可以接受)?
  • 很高兴帮助@puf

标签: javascript firebase google-cloud-firestore


【解决方案1】:

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

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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-06
    • 2013-11-25
    • 1970-01-01
    • 1970-01-01
    • 2021-07-31
    • 1970-01-01
    • 2019-06-24
    相关资源
    最近更新 更多