Совокупный запрос Mongoose $max в $match

Я новичок в мангусте, у меня возникла проблема при попытке получить некоторые данные с помощью совокупного запроса.

Одна часть моей схемы аукциона:

  "_id" : ObjectId("56c58be1faaa402c0d4ae66f"),
        "auction_name" : "Auction2",
        "auction_start_datetime" : ISODate("2016-02-18T09:30:00.000Z"),
        "auction_end_datetime" : ISODate("2016-02-22T09:00:00.000Z"),
        "auction_status" : "active",
        "auction_series" : "GA-06-C",
        "auction_reserve_price" : 1000,
        "auction_increment_amount" : 200,
        "fancy_numbers" : [ 
            {
                "number_end_datetime" : ISODate("2016-02-22T09:00:00.000Z"),
                "number_start_datetime" : ISODate("2016-02-18T09:30:00.000Z"),
                "increment_amount" : 200,
                "reserve_price" : 1000,
                "number" : 5000,
                "_id" : ObjectId("56c58da3faaa402c0d4ae739"),
                "bid_users" : [ 
                    {
                        "user_id" : "56c416a599ad7c9c1611b90b",
                        "bid_amount" : 7200,
                        "bid_time" : ISODate("2016-02-18T11:58:53.025Z"),
                        "user_name" : "[email protected]",
                        "_id" : ObjectId("56c5aec4acebf3b4061a645e")
                    }, 
                    {
                        "user_id" : "56c172dc302a2c90179c7fd1",
                        "bid_amount" : 15400,
                        "bid_time" : ISODate("2016-02-19T10:38:43.506Z"),
                        "user_name" : "[email protected]",
                        "_id" : ObjectId("56c5afe0d2baef7020ede1b6")
                    }, 
                    {
                        "user_id" : "56c477afb27a7ed824c54427",
                        "bid_amount" : 2800,
                        "bid_time" : ISODate("2016-02-18T11:56:58.830Z"),
                        "user_name" : "[email protected]",
                        "_id" : ObjectId("56c5b18a78c3fb340a8c6d75")
                    }, 
                    {
                        "user_id" : "56c5b17378c3fb340a8c6d73",
                        "bid_amount" : 5600,
                        "bid_time" : ISODate("2016-02-18T11:58:34.616Z"),
                        "user_name" : "[email protected]",
                        "_id" : ObjectId("56c5b1d778c3fb340a8c6d78")
                    }
                ]
            }
]

Здесь fancy_number – это массив для аукционной коллекции, а bid_users – это массив для каждого fancy_number.

У меня есть user_id, я хочу запросить и получить только те записи bid_user, в которых он предлагает самую высокую цену.

Например:

Есть 3 пользователя, предложившие 200 300 400 соответственно, я хочу получить запись (то есть число и сумму), только если ставка этого конкретного пользователя составляет 400 (самая высокая). где я буду передавать user_id

Совокупный запрос, который я написал:

var ObjectID = require('mongodb').ObjectID;
tempId = new ObjectID(req.body.aId);

auctionModel.aggregate({$match: {'_id': tempId}},
                        {$unwind: '$fancy_numbers'},
                        {$unwind:"$fancy_numbers.bid_users"},
                        {$group: {'_id':"$fancy_numbers.number" , maxBid: { $max: '$fancy_numbers.bid_users.bid_amount'}}},  
    function(err, bidData){
        if(err){
            console.log('Error :' + err);
        }
        else if(bidData) {
            console.log(bidData);
        }
     });

Почему-то этот запрос не работает, он дает только записи о максимальной ставке и количестве. Мне нужны записи, только если он предложит самую высокую цену.


person Ritz Arlekar    schedule 19.02.2016    source источник
comment
Пожалуйста, может кто-нибудь изучить это.   -  person Ritz Arlekar    schedule 22.02.2016


Ответы (1)


Если я поймаю вас правильно, попробуйте сделать это через $sort и $limit, чтобы получить самую высокую цену, как показано ниже.

auctionModel.aggregate(.aggregate([
                            {$match: {'_id': '123'}}, 
                            {$unwind: '$fancy_numbers'}, 
                            {$unwind: '$fancy_numbers.bid_users'}, 
                            {$sort: {bid_amount: 1}}, 
                            {$limit: 1}]);
person zangw    schedule 22.02.2016