如何获取向其中添加集合的文档ID-android studio firestore
我正在开发菜谱应用程序,这样用户就可以注册到该应用程序并保存自己的菜谱。 我已经创建了类Recipe,现在我想使用特定用户的UID将Recipe的集合添加到特定用户,但我不知道如何检索插入集合的路径ID 求求你,任何帮助。。。我写的代码是:如何获取向其中添加集合的文档ID-android studio firestore,android,google-cloud-firestore,collections,document,Android,Google Cloud Firestore,Collections,Document,我正在开发菜谱应用程序,这样用户就可以注册到该应用程序并保存自己的菜谱。 我已经创建了类Recipe,现在我想使用特定用户的UID将Recipe的集合添加到特定用户,但我不知道如何检索插入集合的路径ID 求求你,任何帮助。。。我写的代码是: public class AddRecipe extends AppCompatActivity { private FirebaseFirestore db; private FirebaseAuth mAuth; privat
public class AddRecipe extends AppCompatActivity {
private FirebaseFirestore db;
private FirebaseAuth mAuth;
private CollectionReference usersRef;
private FirebaseUser user;
DocumentReference docRef;
@Override
protected void onCreate(Bundle savedInstanceState) {
db = FirebaseFirestore.getInstance();
mAuth = FirebaseAuth.getInstance();
usersRef = db.collection("Users");
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_add_recipe);
}
public void addRecipeFunc(View view) {
user = mAuth.getCurrentUser();
String uid = user.getUid();
HashMap<String, String> ingredients = new HashMap<>();
ingredients.put("Banana", "3");
Recipe recipe = new Recipe("bla", "bla", ingredients, "bla", "bla", "bla");
usersRef = db.collection("Users");
//usersRef.document(uid).collection("Recipes").add(recipe);
db.collection("Users").document(uid).collection("Recipes").document("Recipe").set(recipe);
}
}
公共类AddRecipe扩展AppCompative活动{
私有FirebaseFirestore数据库;
私人消防队;
私人收藏参考用户sref;
私有FirebaseUser用户;
文件参考文件;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
db=FirebaseFirestore.getInstance();
mAuth=FirebaseAuth.getInstance();
usersRef=db.collection(“用户”);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u add\u recipe);
}
public void addRecipeFunc(视图){
user=mAuth.getCurrentUser();
字符串uid=user.getUid();
HashMap Components=新的HashMap();
配料。放入(“香蕉”、“3”);
配方=新配方(“bla”、“bla”、配料、“bla”、“bla”、“bla”);
usersRef=db.collection(“用户”);
//usersRef.document(uid).collection(“配方”).add(配方);
db.集合(“用户”).文档(uid).集合(“配方”).文档(“配方”).集合(配方);
}
}
该代码将使用名为Recipe的文档将Recipe添加到Recipe集合中。这意味着每当用户想要添加新配方时,它都会覆盖配方文档。若您并没有给文档命名,Firestore将创建文档并为其本身提供一个id
db.collection("Users").document(uid).collection("Recipes").document().set(recipe);
您可以通过使用DocumentReference调用getId()方法来获取DocumentId
DocumentReference ref = db.collection("Users").document(uid).collection("Recipes").document();
//Id of the document
String docId = ref.getId();
ref.set(recipe);
或者,您可以将另一个名为Id的字段添加到配方类中(不要忘记将该字段添加到构造函数中),然后您可以设置自己的Id。这也会将您的Id保存到文档中
String id = String.valueOf(System.currentTimeMillis());
Recipe recipe = new Recipe(id, "bla", "bla", ingredients, "bla", "bla", "bla");
DocumentReference ref = db.collection("Users").document(uid).collection("Recipes").document(id).set(recipe);
编辑:
如果要在用户文档中添加所有配方对象而不创建子集合,请创建映射并将所有配方存储在该文档中
Map<String, Recipe> recipes = new HashMap<>;
recipes.put("recipe1", new Recipe("bla", "bla", ingredients, "bla", "bla", "bla"));
recipes.put("recipe2", new Recipe("bla2", "bla2", ingredients2, "bla2", "bla2", "bla2"));
首先,感谢您的评论!我的意思是我想将集合“配方”添加到用户字段内的特定文档中-这意味着我想在运行时知道应该将配方插入到哪个用户文档路径。。。希望它更清晰。集合(“用户”)。文档(uid)是当前用户的文档。在该文档之后,如果添加.collection(“Recipes”),“Recipes”集合将添加到当前用户的文档下。因此,它将显示用户->当前用户ID->配方。之后,其他配方文档将添加到配方集合下。用户->当前用户ID->配方->recipeID。因此,每个用户都将拥有自己的配方集合和配方文档。或者,您可以创建一个包含用户所有配方对象的映射,并将其作为字段存储在当前用户的文档中。
Map<String, Recipe> recipes = new HashMap<>;
recipes.put("recipe1", new Recipe("bla", "bla", ingredients, "bla", "bla", "bla"));
recipes.put("recipe2", new Recipe("bla2", "bla2", ingredients2, "bla2", "bla2", "bla2"));
DocumentReference ref = db.collection("Users").document(uid);
db.runTransaction((Transaction.Function<String>) transaction -> {
transaction.update(ref, field, recipes);
return null;
});