Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/427.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
什么';将包含对象和其他字段的嵌套数组上载到Firestore是一种优雅的方式吗?(Node.js,Javascript)_Javascript_Node.js_Firebase_Google Cloud Firestore_Google Cloud Functions - Fatal编程技术网

什么';将包含对象和其他字段的嵌套数组上载到Firestore是一种优雅的方式吗?(Node.js,Javascript)

什么';将包含对象和其他字段的嵌套数组上载到Firestore是一种优雅的方式吗?(Node.js,Javascript),javascript,node.js,firebase,google-cloud-firestore,google-cloud-functions,Javascript,Node.js,Firebase,Google Cloud Firestore,Google Cloud Functions,我想从Node10上运行的云函数将数据部署到Firestore集合中 集合称为“活动”,应该包含带有对象和附加字段的联合数组 首先,这是最重要的对象数组: listOfNonEmptyObjects = [ { pronounsDefinite: 'I' }, { verbsInfinitiv: 'work' }, { prepositions: 'in' }, { articles: 'the' }, { nouns: 'garden' } ]; 这就是我上传它的方式,而ses

我想从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中看到的情况:

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

当我尝试此操作时,会出现一个错误,即我无法编写嵌套数组。 但是我怎样才能实现这个数据结构呢。还是我的数据结构不好

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


因此,每当有新活动或其他内容时,我希望函数使用时间戳和布尔值等其他字段将其添加到活动集合中。

我不清楚您是否以正确的方式考虑Firestore

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

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


在“Firestore阵列与子集合”这一主题上有一些好的线索。很好。

谢谢,我想这是我的问题。链接的文章让我明白了。太好了!请您将其中一个答案标记为已接受,以便线程现在被视为已完成?