Mongoose聚合查询$ match中的$ max

时间:2016-02-19 12:50:56

标签: node.js mongodb mongoose mongoose-schema

我是mongoose的新手,我在尝试使用聚合查询获取某些数据时遇到问题。

我的拍卖架构的一部分是:

https://oauth.io/auth/facebook/me?fields=name,email,gender,birthday

此处,fancy_number是拍卖集合下的数组,bid_users是每个fancy_number下的数组。

我有user_id,我想查询并获取他是最高出价者的bid_user记录。

例如:

  

分别有3个用户出价200,300,400,我想得到的   仅当此特定用户出价为400时才记录(即数量和金额)   (最高)。生病了,传递了user_id

我写的汇总查询是:

  "_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" : "amit@mailinator.com",
                        "_id" : ObjectId("56c5aec4acebf3b4061a645e")
                    }, 
                    {
                        "user_id" : "56c172dc302a2c90179c7fd1",
                        "bid_amount" : 15400,
                        "bid_time" : ISODate("2016-02-19T10:38:43.506Z"),
                        "user_name" : "rbidder@mailinator.com",
                        "_id" : ObjectId("56c5afe0d2baef7020ede1b6")
                    }, 
                    {
                        "user_id" : "56c477afb27a7ed824c54427",
                        "bid_amount" : 2800,
                        "bid_time" : ISODate("2016-02-18T11:56:58.830Z"),
                        "user_name" : "bidder2@mailinator.com",
                        "_id" : ObjectId("56c5b18a78c3fb340a8c6d75")
                    }, 
                    {
                        "user_id" : "56c5b17378c3fb340a8c6d73",
                        "bid_amount" : 5600,
                        "bid_time" : ISODate("2016-02-18T11:58:34.616Z"),
                        "user_name" : "bidder3@mailinator.com",
                        "_id" : ObjectId("56c5b1d778c3fb340a8c6d78")
                    }
                ]
            }
]

不知何故,这个查询无效,它只提供最高出价和数量的记录。只有当他是出价最高者时我才想要记录。

1 个答案:

答案 0 :(得分:1)

如果我抓住了你,请尝试通过$sort$limit来检索最高出价者,如下所示

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