Есть ли способ добавить FieldValue.increment () внутри FieldValue.arrayUnion? - PullRequest
1 голос
/ 19 февраля 2020

Я создал приложение для корзины покупок. Когда пользователь нажимает на тот же продукт, я хочу увеличить номер. если пользователь щелкает один и тот же элемент 10 раз, я хочу обновить firestore следующим образом.

items:[{'productId':'1234','count':10},{'productId':'1111','count':1}]

Итак, я решил использовать FieldValue.increment(1). Но я получил ошибку при добавлении его внутрь arrayUnion

Ошибка

Unhandled Exception: PlatformException(error, Invalid data. FieldValue.increment() can only be used with set() and update(), null)

код

  Future<void> addToCart(ProductModel model){
    var ref = _db.collection('cart').document('7iRLSvH5sgMjaBNw0V4E');

    return ref.setData({
      'userId':'1234',
      'items':FieldValue.arrayUnion([{
        'count':FieldValue.increment(1),
        'productId':model.subCategoryId,
        'productName':model.subCategoryName
      }])
    },merge: true);
  }

1 Ответ

1 голос
/ 19 февраля 2020

Неверные данные. FieldValue.increment () может использоваться только с set () и update (), null)

Как ясно указывает на ошибку, вы можете использовать FieldValue.increment() только при использовании set() и update() функции и не при использовании FieldValue.arrayUnion. Вы не можете добавлять элемент в массив и увеличивать один из его элементов одновременно. Кроме того, FieldValue.increment() может только увеличивать свойство типа номер, которое должно существовать отдельно в документе, а не как член массива.

Если вам нужно увеличить значение член массива, вы должны получить этот массив на клиенте, получить нужный элемент, обновить его и затем записать документ обратно.

Редактировать:

Если следующее item:

[{'productId':'1234','count':10}]

Это объект с двумя свойствами, которые существуют в массиве объектов, вы не можете использовать FieldValue.increment(), чтобы увеличить свойство count отдельного объекта. Вы не можете просто отобразить этот объект в пользовательский объект. На самом деле, у вас есть документ HashMaps. Поэтому вам нужно написать код для этого, итератив по списку, найти соответствующее свойство count, которое вы хотите увеличить, увеличить его, а затем записать документ обратно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...