MongoDB-按客户分组并以最高价格检索文档

MongoDB-按客户分组并以最高价格检索文档,mongodb,Mongodb,考虑将这些对象放在db.com中 如何查询每个客户具有最高价格的文档?对于上述样本: [ { "customer": "bob", "price": 15, "weekday": "MON" }, { "customer": "john", "price": 8, "weekday": "SUN" } ] 我无法使用聚合框架来解决这个问题 编辑1:问题是获取工作日和客户名称。我不想只知道最高价格。您可以使用操作员: db.invoises.aggregate([ {

考虑将这些对象放在db.com中

如何查询每个客户具有最高价格的文档?对于上述样本:

[ {
  "customer": "bob",
  "price": 15,
  "weekday": "MON"
}, {
  "customer": "john",
  "price": 8,
  "weekday": "SUN"
} ]
我无法使用聚合框架来解决这个问题

编辑1:问题是获取工作日和客户名称。我不想只知道最高价格。

您可以使用操作员:

db.invoises.aggregate([
  { $group : { _id: '$customer', price: { $max: '$price' } } }
])
您可以使用运算符:

db.invoises.aggregate([
  { $group : { _id: '$customer', price: { $max: '$price' } } }
])

因为您希望包括工作日,所以需要对文档进行预排序,以便将每个组中您想要的文档放在第一位,然后将$group与$first一起使用:

db.invoices.aggregate[ {$sort:{客户:1,价格:-1}}, {$group:{ _id:“$customer”, 价格:{$first:'$price'}, 工作日:{$first:'$weekday'} }} ]
因为您希望包括工作日,所以需要对文档进行预排序,以便将每个组中您想要的文档放在第一位,然后将$group与$first一起使用:

db.invoices.aggregate[ {$sort:{客户:1,价格:-1}}, {$group:{ _id:“$customer”, 价格:{$first:'$price'}, 工作日:{$first:'$weekday'} }} ]
下面是一种获得您想要的结果的方法,它是以下几种方法之一:

db.invoices.aggregate([
    {$project: {customer: 1, other:{ price: "$price", weekday: "$weekday"}}},
    {$group: {
        _id: '$customer',
        max: {$max: '$other'}
    }
])

下面是一种获得您想要的结果的方法,它是以下几种方法之一:

db.invoices.aggregate([
    {$project: {customer: 1, other:{ price: "$price", weekday: "$weekday"}}},
    {$group: {
        _id: '$customer',
        max: {$max: '$other'}
    }
])

这并没有给我工作日!这就是问题所在,它没有给我工作日!这就是问题所在谢谢!除了在组操作中为每个字段命名外,还有其他所有字段吗?有,但只有在您知道要包含的字段的名称时,才有-一般来说,没有方法包含其余字段。谢谢!除了在组操作中对每个字段进行命名之外,有没有其他方法可以包括所有其他字段?有,但前提是您知道要包括的字段的名称-通常没有方法包括其余字段。