首页 > 解决方案 > How can I store the user number like this (1,2,3...)?

问题描述

When a new user signs up, there should be a property named userNo. which should be increased by 1 in each document, so that it would be easy to pick random users from db using that userNo. Basically, like each document holds a User number similar to Uid but not like Afhghdfh4hk545, it should be like userNo.23 and so one. If a new user signs up its userNo. should be 24. Here is what I have tried.

Stream dummy =
    await FirebaseFirestore.instance.collection('users').snapshots();
var doclength = await dummy.length;
var userNo = (dummy == null || dummy == 0) ? 1 : doclength;
FirebaseFirestore.instance
    .collection('users')
    .doc(currentUser.uid)
    .update({'userNo': userNo});

标签: androidfirebaseflutterdartgoogle-cloud-firestore

解决方案


好的,您需要一个“元文档”,其中包含一个名为“next_user_number”的字段。

创建新用户后,您检查该字段上的号码并将其用作最新用户的“UserNo”。

之后,将“元文档”中的“next_user_number”增加 1。(此处您要使用 FieldValue 增量 - 搜索“firestore 增量”以了解如何操作。)

但是...要绝对确保即使在两个用户同时注册或其他容易出错的情况下也能正常工作,请确保您使用“批量写入”。

批量写入意味着两个操作一起完成,因此递增“next_user_number”和使用正确的“UserNo”编号创建新用户都是准确的。(搜索“firesotre 批量写入”以了解更多信息)。


推荐阅读