我无法让阵列联合或增量在firebase云功能中正常工作。
return docRef.update({
object: {
count: admin.firestore.FieldValue.increment(1),
list: admin.firestore.FieldValue.arrayUnion({
space_id: newData.date_id,
user: {
displayName: "john doe"
}
})
}
当函数运行时,它只是覆盖列表数组中的现有数据,并且计数总是设置为1,即使它当前存在且是数字类型。
在您发表评论之后,这里是我尝试过的HTML代码。请注意,它不是Cloud Function代码(使用Admin SDK),而是使用JavaScript SDK的一些JavaScript代码。但很可能Admin SDK具有相同的行为。
要尝试它,请执行以下操作:
testSO
,并使用ID doc1
和一个虚拟字段创建一个doc。您将看到arrayUnion
和increment
在与arrayUnion
(字段array1
)的字符串数组和increment
(字段count1
)的数组一起使用时有效,但与复合对象无关。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>Title</title>
<script src="https://www.gstatic.com/firebasejs/5.9.3/firebase-app.js"></script>
<script src="https://www.gstatic.com/firebasejs/5.9.3/firebase-database.js"></script>
<script src="https://www.gstatic.com/firebasejs/5.9.3/firebase-auth.js"></script>
<script src="https://www.gstatic.com/firebasejs/5.9.3/firebase-functions.js"></script>
<script src="https://www.gstatic.com/firebasejs/5.9.3/firebase-firestore.js"></script>
</head>
<body>
<script>
// Initialize Firebase
var config = {
apiKey: 'xxxxxxxxxxx',
authDomain: 'xxxxxxxxxxx',
databaseURL: 'xxxxxxxxxxx',
projectId: 'xxxxxxxxxxx'
};
firebase.initializeApp(config);
var db = firebase.firestore();
db.doc('testSO/doc1').update({
count1: firebase.firestore.FieldValue.increment(1),
array1: firebase.firestore.FieldValue.arrayUnion('arrayItem'),
object: {
count: firebase.firestore.FieldValue.increment(1),
list: firebase.firestore.FieldValue.arrayUnion({
space_id: 'spaceNbr',
user: {
displayName: 'john doe'
}
})
}
});
</script>
</body>
</html>