flutter firestore,在数组中添加新对象

tmb3ates  于 2023-10-22  发布在  Flutter
关注(0)|答案(5)|浏览(184)

我有一个对象数组,当用户在数组中输入新数据时,我想添加新对象?

Firestore.instance.collection(city).document('Attractions').updateData(
                        "data", FieldValue.arrayUnion(obj)
                      );

这显示错误,我如何才能实现这与Flutter?

c0vxltue

c0vxltue1#

正确的格式是:

Firestore.instance.collection(city).document('Attractions').updateData({"data": FieldValue.arrayUnion(obj)});

updateDataMap<String,dynamic>为数据。
在你的代码中,你用,作为键值之间的分隔符,而不是:

v9tzhpje

v9tzhpje2#

@anmol.majhail的是对的,但是要解决@Sami Ullah的问题,你必须先做一个列表,然后像这样将对象添加到列表中:

var list = [objectBeingAdded];
Firestore.instance.collection('city').document('Attractions').updateData({"data": FieldValue.arrayUnion(list)});
uurv41yg

uurv41yg3#

安全代码:

假设这是您要添加的数据

Map<String, dynamic> someData = {
  'foo': 1,
  'bar': true,
};

*自动生成唯一ID添加数据:

var collection = FirebaseFirestore.instance.collection('collection');
collection 
    .add(someData) 
    .then((_) => print('Added'))
    .catchError((error) => print('Add failed: $error'));

*用自己的ID添加数据:

var collection = FirebaseFirestore.instance.collection('collection');
collection 
    .doc('document_id') // <-- Document ID
    .set(someData) 
    .then((_) => print('Added'))
    .catchError((error) => print('Add failed: $error'));

*将对象加入数组:

var collection = FirebaseFirestore.instance.collection('collection');
collection 
    .doc('document_id') // <-- Document ID
    .set({'data': FieldValue.arrayUnion(list)}) // <-- Add data
    .then((_) => print('Added'))
    .catchError((error) => print('Add failed: $error'));
mqkwyuun

mqkwyuun4#

这是我构建的一个工作函数,它将新的Map添加到Firestore Services类中的数组中。我正在使用Json Serializable来注解我所有的模型类。userTemplateSections是我的userTemplate firestore文档中的一个数据字段。我将userTemplate作为“addUserTemplateSection”函数的构造函数,以确保编辑的文档正确。
我还添加了从firestore文档数组中删除Maps的函数。
'''

Future<void> addUserTemplateSection(
      {UserTemplate userTemplate, String title, String summary}) async {
    try {
      final UserTemplateSection userTemplateSection =
          UserTemplateSection(title: title, summary: summary);
      await _firestore
          .document(FirestorePath.userTemplate(uid, userTemplate.id))
          .updateData(
        {
          'userTemplateSections':
              FieldValue.arrayUnion([userTemplateSection.toJson()])
        },
      );
    } catch (e) {
      print(e);
    }
  }

'''
'''

Future<void> deleteUserTemplateSection({
    UserTemplate userTemplate,
    UserTemplateSection userTemplateSection,
  }) async {
    try {
      await _firestore
          .document(FirestorePath.userTemplate(uid, userTemplate.id))
          .updateData(
        {
          'userTemplateSections':
              FieldValue.arrayRemove([userTemplateSection.toJson()])
        },
      );
    } catch (e) {
      print(e);
    }
  }

'''

xn1cxnb4

xn1cxnb45#

2023已更新的配置文件:

来自Fireabse文档

final washingtonRef = db.collection("cities").doc("DC");

// Atomically add a new region to the "regions" array field.
washingtonRef.update({
  "regions": FieldValue.arrayUnion(["greater_virginia"]),
});

// Atomically remove a region from the "regions" array field.
washingtonRef.update({
  "regions": FieldValue.arrayRemove(["east_coast"]),
});

相关问题