基于条件对数组中的对象进行MongoDB查询

问题描述 投票:1回答:1

我有一个这样的球员盘点。

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 }
               }
          }
     ]
}
});

您如何列出播放器有足够资源来制作的文件?

mongodb mongoose
1个回答
0
投票

尝试一下:

itemModel.find({
    $or: [{ craftingReagents: { $elemMatch: { name: 'Wood', amount: { $lte: 6 } } } },
    { craftingReagents: { $elemMatch: { name: 'Stone', amount: { $lte: 2 } } } }]
})
© www.soinside.com 2019 - 2024. All rights reserved.