首页 > 解决方案 > MongoDB $merge 存储相同 slug 的多条记录

问题描述

我编写了一个聚合查询,其中我将数据存储到另一个名为 demoDaily 的集合中。但是 $merge 会产生相同 slug 的多条记录。相反,我只想要所有蛞蝓的单一记录。

这是我的查询:

    const dummy = await demoHourly.aggregate([
      {
        $match:{
          lastUpdated: {
            $gte: new Date(finalDate)
          }
        }
      },
      {
        $sort: {
          "lastUpdated": 1,
          "slug": 1
          }
      },
  // { $limit : 100 },
    {
      $group: {
        _id: "$slug",
        avgPriceUsd: {
          $avg: "$priceUsd"
        },
        avgPriceBtc: {
          $avg: "$priceBtc"
        },
        high: {
          $max: "$priceUsd"
        },
        low: {
          $min: "$priceUsd"
        },
        volumeUsd24h: {
          $avg: "$volumeUsd24h"
        },
        marketcapUsd: {
          $avg: "$marketcapUsd"
        },
        open: {
          $first: "$priceUsd"
        },
        close: {
          $last: "$priceUsd"
        },
      }
    },
    {
      "$project": {
          "_id": 0,
          "slug": "$_id",
          "avgPriceUsd": 1,
          "avgPriceBtc": 1,
          "volumeUsd24h": 1,
          "marketcapUsd": 1,
          "high": 1,
          "low": 1,
          "open": 1,
          "close": 1, 
          "lastUpdated": new Date(finalDate)       
        }
    },
    {
      $merge:{
          "into": "demoDaily",
          on: "_id",  
          whenMatched: "replace", 
      }
    },
  ], (err, result) => {
          if (err) {
            console.log(err);
          } else {
            console.log(result);
        }
    }
  )

我也在 mongodb 操场上尝试了这个查询,但它在那里工作正常。在实际的数据库存储期间,它会产生重复的结果。

有什么不对?

任何人都可以帮忙吗?

谢谢!

标签: mongodbmongoosemongodb-queryaggregation-framework

解决方案


推荐阅读