сравнить тот же DocumentReference Firestore - PullRequest
0 голосов
/ 04 мая 2019

Моя структура БД такая, как показано ниже. hasDevice поле - массив ссылок на документы пользователей.

enter image description here

Я пытаюсь удалить дублирование тех же ссылок с hasDevices = [...new Set(hasDevices)]. Но это не сработало.

Вот мой код.

  user.get()
  .then(snapshot => {
    if (!snapshot.exists) {
      return Error('not existing uid');
    }
    let hasDevices = snapshot.get('hasDevices');
    if (!hasDevices) {
      hasDevices = [];
    }
    hasDevices.push(db.collection(constants.DB_COLLECTION_DEVICES).doc(deviceId));
    hasDevices = [...new Set(hasDevices)];
    console.log('hasDevices', hasDevices];
    return user.update('hasDevices', hasDevices);
  })

Как удалить дублирующиеся ссылки?

EDIT. console.log('hasDevices', hasDevices]; слева под бревнами.

hasDevice [ DocumentReference {
    _firestore:
     Firestore {
       _settings: [Object],
       _settingsFrozen: true,
       _serializer: [Serializer],
       _projectId: 'sharp-imprint-234606',
       _lastSuccessfulRequest: 1557034776367,
       _preferTransactions: false,
       _clientPool: [ClientPool] },
    _path: ResourcePath { segments: [Array] } },
  DocumentReference {
    _firestore:
     Firestore {
       _settings: [Object],
       _settingsFrozen: true,
       _serializer: [Serializer],
       _projectId: 'sharp-imprint-234606',
       _lastSuccessfulRequest: 1557034776367,
       _preferTransactions: false,
       _clientPool: [ClientPool] },
    _path: ResourcePath { segments: [Array] } },
  DocumentReference {
    _firestore:
     Firestore {
       _settings: [Object],
       _settingsFrozen: true,
       _serializer: [Serializer],
       _projectId: 'sharp-imprint-234606',
       _lastSuccessfulRequest: 1557034776367,
       _preferTransactions: false,
       _clientPool: [ClientPool] },
    _path: ResourcePath { segments: [Array] } },

EDIT2.

Я наконец-то решил это, как показано ниже.

    hasDevices = hasDevices.filter((v,idx) => {
      if (idx === 0) return true;
      for (let i = 0; i < idx; i++) {
        if (v.id === hasDevices[i].id) {
          return false;
        }
      }
      return true;
    });
    return user.update('hasDevices', hasDevices);

1 Ответ

1 голос
/ 04 мая 2019

hasDevices в вашей структуре данных - это массив, а не DocumentReference.

Таким образом, вы должны сами создать версию массива без дубликатов.

См .:

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