簡體   English   中英

如何將對象數組過濾到 MongoDB 文檔中

[英]How can I filter array of objects into MongoDB Document

我使用 Express 作為后端,使用 MongoDB 作為數據庫。 我的模型如下所示:

皮門:

var pymentSchema = new mongoose.Schema({
  name: {
    type: String,
    enum: [
        "VISA",
        "MASTERCARD",      
        "CASH",     
        ],
    required: [true, "Need a type of pyment"],
    },  
  total: {
    type: Number,
    default:0
    }, 
  });

賬單:

var billingSchema = new mongoose.Schema({  
    pyments: {
        type: [Pyments],
        required: true,
        default:[]
        }});

我存儲的數據如下所示:

"Bill": [
    {
        "_id": "5fe17af4a0f04d088ca24d36",
        "pyments": [
            {
                "total": 1.6,
                "name": "VISA"
            },
            {
                "total": 1.25,
                "name": "CASH"
            }
        ]
    },
    {
        "_id": "5fe8d6ede7adc919d4299d02",
        "pyments": [
            {
                "total": 1.61,
                "name": "VISA"
            },
            {
                "total": 1.00,
                "name": "MASTERCARD"
            },
            
        ]
    },
    {
        "_id": "5fea68a2eb0e382a50dae7a6",
        "pyments": [
            {
                "total": 2.5,
                "name": "VISA"
            },
            {
                "total": 3.38,
                "name": "MASTERCARD"
            }
        ]
    }]

我想要的只是獲得例如僅在VISACASHMASTERCARD中的總數,如下所示:(返回對象)

{        
    "Totals": [
        {
            "total": 5.71,
            "name": "VISA"
        },
        {
            "total": 1.25,
            "name": "CASH"
        },
        {
            "total": 4.38,
            "name": "MASTERCARD"
        }
    ]
}

我真的不知道在這種情況下該怎么做,任何幫助將不勝感激。

您可以使用聚合方法aggregate() ,並在管道階段以下,

  • $unwind解構pyments數組
  • $group by pyments.name並使用$sum獲取pyment.total的總和
BillSchemaModel.aggregate([
  { $unwind: "$pyments" },
  {
    $group: {
      _id: "$pyments.name",
      total: { $sum: "$pyments.total" }
    }
  }
])

操場

暫無
暫無

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

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