У меня есть инвентарь игроков, который выглядит следующим образом.
let inventory = [ { name: 'Wood', amount: 6 }, { name: 'Stone', amount: 2 } ]
Это ресурсы игроков.
У меня также есть список предметов, которые можно создавать.
{"name":"CraftingTable","craftingReagents":[{"name":"Stone","amount":"2"}]}
{"name":"CraftingTable2","craftingReagents":[{"name":"Wood","amount":"4"}]}
{"name":"CraftingTable3","craftingReagents":[{"name":"Wood","amount":"5"},{"name":"Stone","amount":"2"}]}
Схема предметов такова:
let itemSchema = new mongoose.Schema(
{
name:String,
craftingReagents: [
{
name: String,
amount: Number
}
]
}
);
Я хочу запрос, который вернет все обрабатываемые объекты, где инвентарь игроков имеет достаточно ресурсов для этого.
Например, с 6 Wood и 2 Камень запроса должен вернуть все 3 таблицы крафта, так как у игрока достаточно ресурсов для крафта всех трех
Это то, что у меня есть, и я очень потерян. Пожалуйста, помогите!
itemModel.find({
craftingReagents: {
$all: [{
$elemMatch: {
name: {
$in: [
'Wood'
]
},
amount: { $lte: 6 }
}
},
{
$elemMatch: {
name: {
$in: [
'Stone'
]
},
amount: { $lte: 2 }
}
}
]
}
});
Вот вещь. Инвентарь игроков может меняться на бесконечное количество различных ресурсов. И у созданных предметов может быть бесконечное количество различных требований. Я просто привел пример того, как могут выглядеть инвентарь и предметы, которые можно изготовить.
Как вы перечисляете документы, на которые у игрока достаточно ресурсов для создания?