2

私はこのような集計クエリを持っています:

db.yc_promotions.aggregate([
{$match:
    {
        city_from: {$in: ['x1','x2','x3']},
        city_to: {$in: ['y1','y2','y3']},
        date_ret: {$lte: "2013-06-30"},
        updated: {"$gte": "2013-02-01"}
    }
},
{$group:
    {
        _id: {city_to: "$city_to"},
        min: { $min: "$total_price" }
    }
}
])

クエリ応答は、次のような形式で期待どおりです。

{"result" : [
    {
        "_id" : {
            "city_to" : "y1"
        },
        "min" : 2404.72
    },
    {
        "_id" : {
            "city_to" : "y2"
        },
        "min" : 1619.2
    }
    ...
 ]}

ただし、値と都市コードだけでなく、これらの最低価格でオブジェクトを返したいと思います。それ、どうやったら出来るの?

ありがとう!

4

2 に答える 2

1

グループ化するときは、他のフィールドに必要な値を MongoDB に伝える必要があります。だからあなたが持っている場所:

min: { $min: "$total_price" }

このフィールドを複製し、返される射影されたオブジェクトのすべてのフィールドの名前を変更する必要があります。この場合:

city_to: { $min: "$city_to" },
city_from: { $min: "$city_from" }
// etc

したがって、完全な例は次のようになります。

db.yc_promotions.aggregate([
{$match:
    {
        city_from: {$in: ['x1','x2','x3']},
        city_to: {$in: ['y1','y2','y3']},
        date_ret: {$lte: "2013-06-30"},
        updated: {"$gte": "2013-02-01"}
    }
},
{$group:
    {
        _id: {city_to: "$city_to"},
        min: { $min: "$total_price" },
        city_to: { $min: "$city_to" },
        city_from: { $min: "$city_from" }        
    }
}
])

city_tocity_from$group?に追加した方法を参照してください。内で射影したいフィールドごとにそれを行うだけです$group

于 2013-02-08T12:17:25.593 に答える