Google Cloud Functions 向 firestore 中的地图添加值
Google Cloud Functions Add values to a map in firestore
这是我在 firestore 中向地图添加值的代码。目前地图每次都会被覆盖
exports.addTrainingtoList = functions.firestore
.document('/users/{uid}/trainings/{trainings}')
.onCreate((change, context) => {
const doc = admin.firestore().collection('users').doc(context.params.uid).collection('user').doc('trainings');
const trainingsID = change.data().trainingsID;
const trainingsName = change.data().training;
const trainingsTimestamp = change.data().timestamp;
doc.update({
Trainings: {
...doc.Trainings,
[trainingsID]: {
'trainingsName': trainingsName,
'trainingsDate': trainingsTimestamp,
},
},
})
});
这是我在 Franks 回答后更新的代码:
exports.addTrainingtoList = functions.firestore
.document('/users/{uid}/trainings/{trainings}')
.onCreate((change, context) => {
const doc = admin.firestore().collection('users').doc(context.params.uid).collection('user').doc('trainings');
const trainingsID = change.data().trainingsID;
const trainingsName = change.data().training;
const trainingsTimestamp = change.data().timestamp;
const nameField = trainingsID + ".trainingsName";
const timestampField = trainingsID + ".trainingsDate";
doc.update({
Trainings: {
...doc.Trainings,
[nameField]: trainingsName,
[timestampField]: trainingsTimestamp,
},
})
});
当前地图被覆盖。
在这里你可以看到我得到了什么:
在这里你可以看到我想要的。
提前致谢。
为了 add nested fields in an object 使用点符号,像这样:
const nameField = trainingsID + ".trainingsName";
const timestampField = trainingsID + ".trainingsDate";
doc.update({
Trainings: {
...doc.Trainings,
[nameField]: trainingsName,
[timestampField]: trainingsTimestamp,
},
})
由于您更新了问题以显示您想要获得的内容,因此可以通过以下方式完成:
const trainingsID = change.data().trainingsID + Date.now();
然后你的原始代码更新文档。
在 Franks 的帮助下,我终于找到了解决问题的方法。
exports.addTrainingtoList = functions.firestore
.document('/users/{uid}/trainings/{trainings}')
.onCreate((change, context) => {
const doc = admin.firestore().collection('users').doc(context.params.uid).collection('user').doc('trainings');
const trainingsID = change.data().trainingsID;
const trainingsName = change.data().training;
const trainingsTimestamp = change.data().timestamp;
const nameField = `trainings.${trainingsID}.trainingsName`;
const dateField = `trainings.${trainingsID}.trainingsDate`;
doc.update({
[nameField]: trainingsName,
[dateField]: trainingsTimestamp,
})
});
这是结果:
如果您最终想从地图中删除值,您可以使用:
exports.delTrainingtoList = functions.firestore
.document('/users/{uid}/trainings/{trainings}')
.onDelete((change, context) => {
const doc = admin.firestore().collection('users').doc(context.params.uid).collection('user').doc('trainings');
const trainingsID = change.data().trainingsID;
const trainingsName = change.data().training;
const trainingsTimestamp = change.data().timestamp;
const trainingsField = `trainings.${trainingsID}`;
doc.update({
[trainingsField]: FieldValue.delete(),
})
});
这是我在 firestore 中向地图添加值的代码。目前地图每次都会被覆盖
exports.addTrainingtoList = functions.firestore
.document('/users/{uid}/trainings/{trainings}')
.onCreate((change, context) => {
const doc = admin.firestore().collection('users').doc(context.params.uid).collection('user').doc('trainings');
const trainingsID = change.data().trainingsID;
const trainingsName = change.data().training;
const trainingsTimestamp = change.data().timestamp;
doc.update({
Trainings: {
...doc.Trainings,
[trainingsID]: {
'trainingsName': trainingsName,
'trainingsDate': trainingsTimestamp,
},
},
})
});
这是我在 Franks 回答后更新的代码:
exports.addTrainingtoList = functions.firestore
.document('/users/{uid}/trainings/{trainings}')
.onCreate((change, context) => {
const doc = admin.firestore().collection('users').doc(context.params.uid).collection('user').doc('trainings');
const trainingsID = change.data().trainingsID;
const trainingsName = change.data().training;
const trainingsTimestamp = change.data().timestamp;
const nameField = trainingsID + ".trainingsName";
const timestampField = trainingsID + ".trainingsDate";
doc.update({
Trainings: {
...doc.Trainings,
[nameField]: trainingsName,
[timestampField]: trainingsTimestamp,
},
})
});
当前地图被覆盖。
在这里你可以看到我得到了什么:
在这里你可以看到我想要的。
提前致谢。
为了 add nested fields in an object 使用点符号,像这样:
const nameField = trainingsID + ".trainingsName";
const timestampField = trainingsID + ".trainingsDate";
doc.update({
Trainings: {
...doc.Trainings,
[nameField]: trainingsName,
[timestampField]: trainingsTimestamp,
},
})
由于您更新了问题以显示您想要获得的内容,因此可以通过以下方式完成:
const trainingsID = change.data().trainingsID + Date.now();
然后你的原始代码更新文档。
在 Franks 的帮助下,我终于找到了解决问题的方法。
exports.addTrainingtoList = functions.firestore
.document('/users/{uid}/trainings/{trainings}')
.onCreate((change, context) => {
const doc = admin.firestore().collection('users').doc(context.params.uid).collection('user').doc('trainings');
const trainingsID = change.data().trainingsID;
const trainingsName = change.data().training;
const trainingsTimestamp = change.data().timestamp;
const nameField = `trainings.${trainingsID}.trainingsName`;
const dateField = `trainings.${trainingsID}.trainingsDate`;
doc.update({
[nameField]: trainingsName,
[dateField]: trainingsTimestamp,
})
});
这是结果:
如果您最终想从地图中删除值,您可以使用:
exports.delTrainingtoList = functions.firestore
.document('/users/{uid}/trainings/{trainings}')
.onDelete((change, context) => {
const doc = admin.firestore().collection('users').doc(context.params.uid).collection('user').doc('trainings');
const trainingsID = change.data().trainingsID;
const trainingsName = change.data().training;
const trainingsTimestamp = change.data().timestamp;
const trainingsField = `trainings.${trainingsID}`;
doc.update({
[trainingsField]: FieldValue.delete(),
})
});