簡體   English   中英

Mongoose | 在數組中查找對象,每個 object 都有另一個對象數組來滿足條件

[英]Mongoose | Find objects inside of an array, that each object has another array of objects to satisfy condition

我有一個集合Shops Shops集合中的每個 object 都有一個名為itemsItem對象數組。

{
    _id: ObjectId(...),
    shopName: 'Ice cream Shop',
    items: [ 
        <Item>{
            itemName: 'Chocolate IC',
            availabilities: [
                {
                    city: 'NY',
                    arrivals: [
                        {
                            price: 3.99,
                            quantityLeft: 0,
                            date: 'yesterday'
                        },
                        {
                            price: 3.99,
                            quantityLeft: 40,
                            date: 'today'
                        }
                    ]
                },
                {
                    city: 'LA',
                    arrivals: []
                }
            ]
        },
        <Item>{
            itemName: 'Strawberry IC',
            availabilities: [
                {
                    city: 'NY',
                    arrivals: [
                        {
                            price: 3.99,
                            quantityLeft: 0,
                            date: 'yesterday'
                        },
                    ]
                }
            ]
        },
    ],
},
... anotherShops

我想從特定shop獲取總 quantityLeft 大於 0 的Item對象列表。 我嘗試使用此代碼從shopName等於'Ice cream Shop'的商店中獲取名稱以"Straw"開頭的所有items

const items = await Shop.aggregate()
    .match({
        shopName: 'Ice cream Shop',
    })
    .project({
        items: {
            $filter: {
                input: "$items",
                as: "item",
                cond: {
                    $regexMatch: {
                        input: "$$item.itemName",
                        regex: `.*Straw.*`,
                    },
                },
            },
        },
    });

它有效。 但我不知道如何對每個itemavailabilities數組中的所有quantityLeft值求和,並只返回總和大於 0 的items

availabilities數組可以是空數組 []。

city參數也需要符合條件。 例如,只有NY有貨的商品

我需要這個來獲取某家商店的商品清單,並且只有仍有庫存的商品。 相當困難。

我想出了這個解決方案。 如果您有更好的解決方案,請發布。

const shop = await GCShop.aggregate([
    {
        $match: {
            shopName: 'Ice Cream Shop',
        },
    },
    {
        $unwind: "$items",
    },
    {
        $unwind: "$items.availabilities",
    },
    {
        $unwind: "$items.availabilities.arrivals",
    },
    {
        $group: {
            _id: "$items.id",
            items_name: { $first: "$items.name" },
            arrivals: {
                $push: {
                    arrival_id: "$items.availabilities.arrivals.arrival_id",
                    price: "$items.availabilities.arrivals.price",
                    qtty: "$items.availabilities.arrivals.qtty",
                },
            },
            totalQtty: { $sum: "$items.availabilities.arrivals.qtty" },
        },
    },
    {
        $project: {
            offer_id: "$_id",
            _id: 0,
            offer_name: 1,
            totalQtty: 1,
            arrivals: 1,
        },
    },
    {
        $match: {
            totalQtty: {
                $gt: 0,
            },
        },
    },
]).limit(20);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM