首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MongoDB -按客户分组并以最高价格检索文档

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

Stack Overflow用户
提问于 2013-03-10 19:00:54
回答 3查看 1K关注 0票数 2

考虑将这些对象放在db.invoices

代码语言:javascript
复制
{ "customer" : "john", "price" : 4, "weekday": "WED" }
{ "customer" : "john", "price" : 8, "weekday": "SUN" }
{ "customer" : "john", "price" : 6, "weekday": "SAT" }
{ "customer" : "john", "price" : 5, "weekday": "SUN" }    
{ "customer" : "bob", "price" : 10, "weekday": "SAT" }
{ "customer" : "bob", "price" : 15, "weekday": "MON" }

如何查询每个客户最高限价的单据?对于上面的示例:

代码语言:javascript
复制
[ {
  "customer": "bob",
  "price": 15,
  "weekday": "MON"
}, {
  "customer": "john",
  "price": 8,
  "weekday": "SUN"
} ]

我不能使用聚合框架来解决这个问题。

编辑1:获取weekday和客户名称时出现问题。我不想要单独的最高价格。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-03-11 02:36:27

因为您希望包含weekday,所以需要对文档进行预排序,以便首先从每个组中放置所需的文档,然后将$group$first一起使用

代码语言:javascript
复制
db.invoices.aggregate([
    {$sort: {customer: 1, price: -1}},
    {$group: {
        _id: '$customer',
        price: {$first: '$price'},
        weekday: {$first: '$weekday'}
    }}
])
票数 3
EN

Stack Overflow用户

发布于 2013-03-11 04:46:27

这里有一种方法可以得到你想要的结果,它是几种方法之一:

代码语言:javascript
复制
db.invoices.aggregate([
    {$project: {customer: 1, other:{ price: "$price", weekday: "$weekday"}}},
    {$group: {
        _id: '$customer',
        max: {$max: '$other'}
    }
])
票数 1
EN

Stack Overflow用户

发布于 2013-03-10 21:15:48

您可以使用$group运算符:

代码语言:javascript
复制
db.invoises.aggregate([
  { $group : { _id: '$customer', price: { $max: '$price' } } }
])
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15321485

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档