如何在Firestore中向同一字段添加多个值

时间:2018-05-27 14:03:43

标签: android firebase google-cloud-firestore

我正在尝试将多个图片Uri添加到Firestore中的相同字段。

Screenshot of my firestore db

我一直在尝试多种方法,而不是将图像Uris添加到同一个字段中,它会在fire store中创建多个文档。我需要帮助。

 for (int i = 0; i < imageUris.size(); i++) {

        Toast.makeText(getApplicationContext(), "ROUND:" + i, Toast.LENGTH_SHORT).show();
        imgUri = imageUris.get(i);
        imageFilesPath = storageReference.child("Ads_images" + "/" + "Ad_" + UUID.randomUUID().toString() + ".jpg");

        imageFilesPath.putFile(imgUri).addOnCompleteListener(new OnCompleteListener<UploadTask.TaskSnapshot>() {
            @Override
            public void onComplete(@NonNull Task<UploadTask.TaskSnapshot> task) {
                if (task.isSuccessful() && task != null) {

                    LIST.add(task.getResult().getDownloadUrl().toString());
                    Log.e(TAG, "List inside"+LIST.size());

                    Map<String, Object> adMap = new HashMap<>();
                    adMap.put("user_id", user_id);
                    adMap.put("description", "Small description is shown here");
                    adMap.put("imageUris", Arrays.asList(LIST.get(0)));
                    firebaseFirestore.collection("Ads").add(adMap);
                }else {

                }
            }
        });

2 个答案:

答案 0 :(得分:3)

每次在集合上调用add()时,Firestore都会创建一个新文档。由于您现在在上传每个文件后调用add(),因此您将获得每个文件的单独文档。如果您要将URL添加到现有文档,则必须获得该文档的DocumentReference并进行更新。

firebaseFirestore.collection("Ads").doc("v1ys3tyQ7vhHLD0ietAw").update(adMap);

要向imageUris数组添加URL,您需要先加载该数组的当前内容(以确定要将项添加到的索引)。这种读取 - 更新序列在规模上有些低效。如果这对您的应用很重要,您可能需要考虑使用storing the URLs in a map inside the documentstoring them in a subcollection under the document

答案 1 :(得分:0)

 Map<String,Object> imageUrl = new HashMap<>();
 imageUrl.put("ImageUrl", imageList);
    firebaseFirestore.collection("ImageDetails").document(userId)
                                                .set(imageUrl,SetOptions.merge());

这对我也很好,但是一旦添加了所有列表项,我就分别通过了列表,其中imageUrl是我的地图对象,imageList是用于存储生成的图像uri下载链接的数组列表

我也有机会看一下您如何取回所有这些图像uri的代码