我有一个类似这样的球员盘点。
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个木材和2个石头,该查询应返回所有3个制作表,因为玩家有足够的资源来制作这3个制作表
这是我到目前为止所拥有的,我非常迷失。请帮忙!
itemModel.find({
craftingReagents: {
$all: [{
$elemMatch: {
name: {
$in: [
'Wood'
]
},
amount: { $lte: 6 }
}
},
{
$elemMatch: {
name: {
$in: [
'Stone'
]
},
amount: { $lte: 2 }
}
}
]
}
});
这里有东西。玩家清单可以更改为无限数量的不同资源。并且可制作对象可以具有无限数量的不同要求。我仅举一个示例,说明库存和可加工对象的外观。
您如何列出播放器有足够资源来制作的文件?
答案 0 :(得分:0)
尝试一下:
itemModel.find({
$or: [{ craftingReagents: { $elemMatch: { name: 'Wood', amount: { $lte: 6 } } } },
{ craftingReagents: { $elemMatch: { name: 'Stone', amount: { $lte: 2 } } } }]
})