如何动态从 Firestore 数组中删除多个元素?

Zor*_*gan 2 node.js firebase google-cloud-platform google-cloud-functions google-cloud-firestore

我想从 Firestore 数组中删除多个元素:

var eliminatedThisRound = []

for (const player in players){
    if (players[player].eliminated === false && players[player].answer !== answer) {
        eliminatedThisRound.push(players[player].uid);
    }
}
var update = {
    roundFinished: true,
    nextRound: date.valueOf() + 12000,seconds
    players: updatedPlayers,
    remainingPlayers: admin.firestore.FieldValue.arrayRemove(eliminatedThisRound)
}
await t.update(gameRef, update);
Run Code Online (Sandbox Code Playgroud)

上面返回此错误:

transaction failure: Error: Element at index 0 is not a valid array element. Nested arrays are not supported. 
Run Code Online (Sandbox Code Playgroud)

所以如果我知道这些值就好了,因为我可以做这样的事情:

remainingPlayers: admin.firestore.FieldValue.arrayRemove("player1", "player2")
Run Code Online (Sandbox Code Playgroud)

但是我还没有找到使参数动态化的方法arrayRemove()

任何想法?

Ren*_*nec 7

您需要使用Spread 运算符,如下所示,以便将 的所有元素作为eliminatedThisRound参数传递给该arrayRemove()方法。

var eliminatedThisRound = []

for (const player in players){
    if (players[player].eliminated === false && players[player].answer !== answer) {
        eliminatedThisRound.push(players[player].uid);
    }
}
var update = {

    // ...

    admin.firestore.FieldValue.arrayRemove(...eliminatedThisRound)
}

await t.update(gameRef, update);
Run Code Online (Sandbox Code Playgroud)

请注意,数组中至少应有一个元素,否则您将arrayRemove()使用 0 个参数进行调用,而它需要至少 1 个参数。remainingPlayers因此,您可以在将属性分配给对象之前检查数组长度update