簡體   English   中英

Mongodb Sum 查詢不返回任何內容

[英]Mongodb Sum query returns nothing

我有這個活動行集合的例子

{
  "_id" : ObjectId("5ec90b5258a37c002509b27d"), 
  "user_hash" : "asdsc4be9fe7xxx", 
  "type" : "Expense", 
  "name" : "Lorem", 
  "amount" : 10000, 
  "date_created" : 1590233938 
}

我想用這個聚合代碼收集活動的總金額

db.activities.aggregate(
  [
    {
      $group: 
        {
          _id: "$id", 
          total: { $sum: "$amount" } 
        } 
    }, 
    { 
      $match: { type: "Expense", "user_hash": "asdsc4be9fe7xxx" } 
    } 
  ] 
)

預期結果:{_id:null,總計:xxxxx }

實際結果:

有什么解決方案嗎? 先感謝您

您的查詢有 2 個問題:

  1. 您對每個單獨的文檔進行總和聚合,而不是對整個集合進行聚合,因為您指定了_id: "$id",而您需要指定_id: null
  2. 您在小組賽之后的聚合中執行match階段。 但是您需要先執行它因為在您分組之后,結果將類似於:
{
  "_id": null,
  "total": 15
}

如您所見,此 object 沒有原始對象具有的任何字段,因此將匹配0個結果。 階段的順序很重要,因為基本上每個階段都會根據前一個階段的結果執行一些操作(mongodb 自動優化階段時會有一些例外,但這些階段中的不同順序不會產生不同的結果)。

所以查詢應該是:

db.activities.aggregate(
  [
    { 
      $match: { type: "Expense", "user_hash": "asdsc4be9fe7xxx" } 
    },
    {
      $group: 
        {
          _id: null, 
          total: { $sum: "$amount" } 
        } 
    },
  ] 
)

暫無
暫無

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

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