簡體   English   中英

Mongodb 從文檔中獲取聚合結果中的特定屬性

[英]Mongodb get specific properties in the aggregate result from a document

我對如何使用聚合來獲得非常特定類型的結果有點迷茫。 我的數據庫文檔具有以下格式

{
  _id: 122434
  houseDetails: {
     hasBedroom: {
       flag: true,
     },
     hasKitchen: {
       flag: false
     },
     hasBalcony: {
       flag: false
     },
     hasFoyer: {
       flag: true
     },
  }
}

(這是一個文檔結構的基本示例,細節不同)

我正在嘗試查詢嵌套houseDetails屬性為真的所有文檔。 所以最后我希望結果看起來像

{
  _id: 122434,
  houseDetails: [hasBedroom, hasFoyer]
}

我可以使用 $match 來查找至少有一個屬性為 true 的所有文檔,但我似乎不知道如何僅將值為 true 的名稱投影到數組中。

一種選擇是:

  1. 使用$objectToArray從鍵和值創建一個數組
  2. $filter它只保留true
  3. 使用$map格式化項目
db.collection.aggregate([
  {$project: {houseDetails: {$objectToArray: "$houseDetails"}}},
  {$project: {
      houseDetails: {
        $filter: {
          input: "$houseDetails",
          cond: {$eq: ["$$this.v.flag", true]}
        }
      }
    }
  },
  {$project: {
      houseDetails: {
        $map: {
          input: "$houseDetails",
          in: "$$this.k"
        }
      }
    }
  }
])

看看它在操場上的例子是如何工作的

您也可以使用$reduce僅分兩步完成:

db.collection.aggregate([
  {$project: {houseDetails: {$objectToArray: "$houseDetails"}}},
  {$project: {
      houseDetails: {
        $reduce: {
          input: "$houseDetails",
          initialValue: [],
          in: {
            $setUnion: [
              "$$value",
              {$cond: [{$eq: ["$$this.v.flag", true]}, ["$$this.k"], []]}
            ]
          }
        }
      }
    }
  }

看看它在操場上的例子是如何工作的 - 減少

暫無
暫無

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

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