Удалить объект внутри массива с помощью firestore - PullRequest
0 голосов
/ 30 января 2019

Я хочу запросить конкретный объект по свойству «id» внутри массива и удалить / удалить весь объект.Возможно ли это через пожарный склад?

Моя структура пожарного депо выглядит следующим образом:

enter image description here

Пока у меня естьфункция с именем removeCard(), принимающая docId, который является идентификатором документа в firestore, и cardId, который является значением свойства "id" внутри объекта.

Функция removeCard ():

export const removeCard = (retroId, cardId) => {
  return (dispatch, getState, { getFirestore }) => {
    // make async call to database
    const firestore = getFirestore();

    firestore.collection('retros').doc(retroId).update({
      // firestore query to remove/delete this card.
    }).then(() => {
      dispatch({ type: 'DELETE_CARD_SUCCESS' });
    }).catch(err => {
      dispatch({ type: 'DELETE_CARD_ERROR' }, err);
    });
  }
};

Но я не могу понять, как выполнить этот запрос или вообще возможно ли это сделать с помощью Firestore.Любая помощь приветствуется.Просто скажите мне, должен ли я предоставить больше информации, чтобы прояснить мой вопрос.

1 Ответ

0 голосов
/ 30 января 2019

На самом деле, на момент написания невозможно, с array-contains, запросить определенное свойство объекта, хранящегося в массиве.

Возможный обходной путь, который заключается в запросе для всего объекта .

В вашем случае это будет похоже на

db.collection('retros').where("cardsAction", "array-contains", {id: "65....", content: "this is...", time: ....})

, но, очевидно, этот обходной путь не будет полезен в вашем случае, так как оба timeи content значения могут различаться.

Другими словами, вам, вероятно, потребуется изменить модель данных.

Один из возможных подходов - дублирование ваших данных (что довольно часто встречается в мире NoSQL).) и иметь другой массив только с ids из cardAction, например:

cardActionIds = ["65....", "5789", ....]

Таким образом, вы можете использовать array-contains, и как только вы найдете документы, соответствующие cardActionIds, выманипулировать другим массивом (то есть cardAction)

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