Javascript Firebase:如何创建嵌套对象
对于如何更新Firebase记录的嵌套属性有一些问题,但对于如何创建具有嵌套属性的记录没有答案 与之相似,但没有帮助 从web上,目标是创建具有嵌套属性的Firebase记录 使用点表示法可以进行更新,但在重复使用同一个键创建记录时,不会创建嵌套的层次结构 这是有意义的,因为键不传递有关子属性的数据类型的任何信息 创建具有嵌套属性的对象的正确方法是什么Javascript Firebase:如何创建嵌套对象,javascript,firebase,web,google-cloud-firestore,Javascript,Firebase,Web,Google Cloud Firestore,对于如何更新Firebase记录的嵌套属性有一些问题,但对于如何创建具有嵌套属性的记录没有答案 与之相似,但没有帮助 从web上,目标是创建具有嵌套属性的Firebase记录 使用点表示法可以进行更新,但在重复使用同一个键创建记录时,不会创建嵌套的层次结构 这是有意义的,因为键不传递有关子属性的数据类型的任何信息 创建具有嵌套属性的对象的正确方法是什么 async test(serviceId, numCredits, emailAddress) { // Set credits key
async test(serviceId, numCredits, emailAddress) {
// Set credits key.
let creditsKey = `credits.${serviceId}.numAllowed`;
try {
// Get user matching @emailAddress.
let user = await this.getUser(emailAddress);
// New user? Create database record.
if (!user) {
this.db_
.collection('users')
.add(
{
emailAddress: emailAddress,
[{creditsKey}]: numCredits
}
);
// Nope, user exists so update his/her record.
} else {
// Set update query.
let query = this.db_
.collection('users')
.where('emailAddress', '==', emailAddress);
// Run update query.
const querySnapshot = await query.get();
return querySnapshot.docs[0].ref.update({
[creditsKey]: firebase.firestore.FieldValue.increment(numCredits)
});
}
} catch(e) {
debug('Error in test(): ' + e);
}
}
如果我正确理解了你的问题,下面就可以了。(不过,可能还有更优雅的解决方案……)
我们找不到更优雅的解决方案,这也是我们最后要做的。谢谢你的帮助!
const obj = {};
obj.numAllowed = numCredits;
const obj1 = {};
obj1[serviceId] = obj;
// ...
this.db_.collection('users')
.add(
{
emailAddress: emailAddress,
credits: obj1
})