Хранилище данных не удаляет объект

#node.js #google-cloud-datastore

#node.js #google-облако-хранилище данных

Вопрос:

Я пытался получить простую облачную функцию для удаления объекта в хранилище данных, и по какой-то причине она не работает, несмотря на то, что не выдает ошибку.

Мой код довольно прост:

 const keyToDelete = datastore.key({
    namespace: 'alerts',
    path: ['alerts', entId]
});
datastore.delete(keyToDelete, (err, apiResp) => {
    if (err) console.log(JSON.stringify(err));
    else {
        console.log('Deleted ', JSON.stringify(apiResp));
    }
});
  

Я трижды проверил, и ключ определенно указывает на действительный объект, и .удаление не выдает ошибку — оно просто ничего не обновляет, и ответ подтверждает это, говоря, что индексы не были обновлены:

 {
   "mutationResults": [
      {
         "key": null,
         "version": "1598396828478034",
         "conflictDetected": false
      }
   ],
   "indexUpdates": 0
}
  

Я думал, что проблема заключалась в том, что ключ возвращал значение null, но когда я написал что-то не так в ключе, это выдало ошибку. После некоторого поиска в Google я также видел несколько человек, которые получали это, и удаления все еще работали, поэтому я не думаю, что это проблема.

Я использую этот точно такой же код для удаления другого объекта в другой облачной функции, и он работает отлично. Единственное различие между ними заключается в том, что у одного, который работает, нет пространства имен в ключе, поскольку удаляемые объекты находятся в пространстве имен по умолчанию. Конечно, проблема не в этом?

Ответ №1:

Заставило это работать, установив идентификатор для объекта, который был строкой, а не числом, и который, следовательно, превратил его в имя, а не идентификатор. Я сделал это только потому, что заметил, что ключ задает только имя, и по какой-то причине не смог найти способ изменить это на ID. Кажется немного странным, поскольку все остальное работает с использованием идентификатора, но пока это работает.

Ответ №2:

Принудительное изменение типа идентификатора с помощью datastore.int () сработало для меня

 const keyToDelete = datastore.key({
    namespace: 'alerts',
    path: ['alerts', datastore.int(entId)]]
});