从mongodb中的多个数组中获取每个日期的最低值

时间:2016-07-14 13:31:33

标签: mongodb mongodb-query

我有以下文档结构:

{
    "_id" : ObjectId("5786458371d24d924d8b4575"),
    "uniqueNumber" : "3899822714",
    "lastUpdatedAt" : ISODate("2016-07-13T20:11:11.000Z"),
    "new" : [ 
        {
            "price" : 8.4,
            "created" : ISODate("2016-07-13T13:11:28.000Z")
        }, 
        {
            "price" : 10.0,
            "created" : ISODate("2016-07-13T14:50:56.000Z")
        }
    ],
    "used" : [ 
        {
            "price" : 10.99,
            "created" : ISODate("2016-07-08T13:46:31.000Z")
        }, 
        {
            "price" : 8.59,
            "created" : ISODate("2016-07-13T13:11:28.000Z")
        }
    ]
}

现在我需要一个列表,它给出了每个日期每个数组的最低价格。

所以,例如:

{ 
    "uniqueNumber" : 1234,
    "prices" : {
        "created" : 2016-07-08,
        "minNew" : 123,
        "minUsed" : 22
    }
}

到目前为止,我已经构建了以下查询

db.getCollection('col').aggregate([
    {
        $match : {
            "uniqueNumber" : "3899822714"
        }
    },
    {
        $unwind : "$used"
    },
    {
        $project : {
            "uniqueNumber" : "$uniqueNumber",
            "price" : "$used.price",
            "ts" : "$used.created"
        } 
    },
    {
        $sort : { "ts" : 1 }
    },
    {
        $group : {_id: "$uniqueNumber", priceOfMaxTS : { $min: "$price" }, ts : { $last: "$ts" }}
    }
]);

但这只会给我最高价的最低价。我无法找到任何能够将我推向正确方向以获得理想结果的东西。

更新

我找到了一种方法,可以通过此查询获得按日分组的used数组的最低价格:

db.getCollection('col').aggregate([
    {
        $match : {
            "uniqueNumber" : "3899822714"
        }
    },
    {
        $unwind : "$used"
    },
    {
        $project : {
            "asin" : "$uniqueNumber",
            "price" : "$used.price",
            "ts" : "$used.created",
            "y" : { "$year" : "$used.created" },
            "m" : { "$month" : "$used.created" },
            "d" : { "$dayOfMonth" : "$used.created" }
        } 
    },
    {
        $group : { _id : { "year" : "$y", "month" : "$m", "day" : "$d" }, minPriceOfDay : { $min: "$price" }}
    }
]);

不,我只需要找到一种方法也可以在同一查询中找到new数组。

0 个答案:

没有答案