Я использую MongoDB + Mongoose + Node.JS
Логика приложения: у нас есть игра, похожая на тральщик. Ячейки, выбранные пользователем, хранятся в игровом поле в fields: Array
, а местоположения бомб - в bombs: Array
.
. Когда пользователь выполняет запрос на выбор ячейки в игре, сервер должен установить fields[cell] = 1 // 1 means cell is selected
. Если бомба в ячейке bombs[cell] === 1 // 1 means bomb in cell
, нам нужно сделать другое обновление, например fields[cell] = 1; winning = 0
. Как реализовать это в одном запросе?
Я пытался сделать запрос, который изменяет только field[cell] = 1
, но не меняет winning = 0
, если внутри поля обнаружена бомба.
Код:
const selection = await db.Minesweeper.findOneAndUpdate({
uid,
winning: null,
}, {
$set: { [`fields.${cell}`]: 1, },
// I need to set winning = 0, if [bombs.${cell}] = 1
});
Схема игры:
const MinesweeperSchema = new mongoose.Schema({
uid: { type: Number, required: true },
bet: { type: Number, required: true },
winning: { type: Number, default: null },
fields: { type: Array, default: new Array(5*5).fill(0) },
bombs: { type: Array, required: true },
},
{ timestamps: true });
Ну, опять же:
Мне нужна эта логика: если выбранная ячейка содержит бомбу, установите field[cell_index] = 1; winning = 0
, но если ячейка неНе содержит бомбу, установите field[cell_index] = 1