Vyhledávání na webu

javascript - MongoDB: přidat nebo aktualizovat položky s vnořeným polem


Mám dokument s následujícími údaji:

Chest: {
    ChestID: 400, // Chest ID is unique
    Items: [{
        ItemID: 200, //Item ID unique too
        ItemIndexes: ['aaa10', 'bbb20'] // indexes should not be repeated
    }]
}

Snažil jsem se to udělat, ale nemohu najít způsob, jak to funguje:

public async appendItems(chestId: number, items: Array < ChestItem > ) {
    const tokensIds = items.map(item => item.tokenId)
    // bidimensional array [][]
    const tokenIndexes = items.map(item => item.indexesAsArray)

    await this.raw.updateOne({
        ChestID: chestId
    }, {
        $push: {
            "Items.$[item].token_indexes": {
                // in that bidimensional array there can be repeated indexes
                $each: tokenIndexes,
                position: "$"
            }
        }
    }, {
        arrayFilters: [{
            "item.token_id": {
                $in: tokensIds
            }
        }],
    })
}

Takže chci udělat následující:

Nejprve musím najít ID truhly, pak musím najít ID položek, pak pokud ID položky existuje, jen přidám nové indexy (nemůže být více než 1 opakující se index), pokud ne, přidám položku.