#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)]]
});