将包含对象和其他字段的嵌套数组上传到 Firestore 的优雅方法是什么?(Node.js, Javascript)



我有一些数据要从Node10上运行的云函数部署到Firestore集合。

该集合被称为";活动";并且应该保存具有对象和附加字段的联合数组。

首先,这是最重要的对象数组:

listOfNonEmptyObjects = [ 
{ pronounsDefinite: 'I' },
{ verbsInfinitiv: 'work' },
{ prepositions: 'in' },
{ articles: 'the' },
{ nouns: 'garden' } 
];

这就是我上传它的方式,而sessionID_original基本上是文档名称,intentDisplayName只是一个字符串,用于在arrayUnion:中创建对象

return writeToDatabase (
sessionID_original,
{"activities" : admin.firestore.FieldValue.arrayUnion(createObject(intentDisplayName, listOfNonEmptyObjects))}
);

以下是的功能


function createObject(key, list){
var test = {};
test[key] = list;
return test;
}
function writeToDatabase(sessionID_original, data) {
const docRef = db.collection('users').doc(sessionID_original);

return db.runTransaction(t => {
return t.get(docRef)
.then(doc => {
t.set(docRef, data, {merge: true});
});
}).catch(err => {
console.log(`Error writing to Firestore: ${err}`);
});
}

现在这就是我在Firestore中看到的样子:

带有listOfNonEmptyObjects 的集合的屏幕截图

但现在我希望我的函数为数据添加时间戳或附加信息:

带有listOfNonEmptyObjects、时间戳和布尔值等的集合的屏幕截图

当我尝试这样做时,它会给我一个错误,即我不能编写嵌套数组。但是我该如何实现这种数据结构呢。还是我的数据结构不好?

另一种尝试可能是在NonEmptyObjects列表中放入一个时间戳。但我认为这会使阅读时间戳变得更加困难。

因此,每次有新的活动或其他东西时,我都希望函数将其添加到带有时间戳的活动集合中,也许还有其他字段,如布尔值等。

我不清楚您是否以正确的方式看待Firestore。

Firestore是一个文档存储数据库。在大多数情况下,您将一次读取和写入整个文档(JSON对象或键/值对集(。尽管您可以在单个文档中创建嵌套和复杂的数据结构,但在总体大小和索引功能方面存在局限性,这些局限性最终会限制单个复杂文档的有用性(请参阅Firestore限制和配额(

在我看来,您放入数组中的元素可能会从自己的文档中受益?

关于";Firestore数组与子集合";。这一条似乎很好地说明了利弊。

相关内容

  • 没有找到相关文章

最新更新