标签: aggregation-framework

MongoDB 嵌套 $group 和 sum

我是 MongoDB 的新手,所以如果我错过了文档中的某些内容,请原谅我。我有一个这样的收藏

[date: "2015-12-01", status: "resolved", parentId: 1]
[date: "2015-12-01", status: "resolved", parentId: 2]
[date: "2015-12-01", status: "resolved", parentId: 2]
[date: "2015-12-01", status: "waiting", parentId: 2]
[date: "2015-12-02", status: "resolved", parentId: 1]
[date: "2015-12-02", status: "waiting", parentId: 2]
[date: "2015-12-02", status: "waiting", parentId: 2]
[date: "2015-12-03", status: "resolved", parentId: 1]
Run Code Online (Sandbox Code Playgroud)

我期望对按以下分组的输出求和

日期 -> 父 ID -> 状态

所以那就是

{
    "2015-12-01": {
        "1": {
            "resolved": 1
        },
        "2": {
            "resolved": 2,
            "waiting": 1
        }
    }
    "2015-12-02": {
        "1": {
            "resolved": …
Run Code Online (Sandbox Code Playgroud)

mapreduce mongodb mongodb-query aggregation-framework

0
推荐指数
1
解决办法
2263
查看次数

MongoDB、Java - 从 JSON 查询到文档

嘿,

我需要一些帮助将以下 MongoDB 查询转换为 MongoDB Java 驱动程序查询。

请注意,查询有效。

db.days.aggregate([
    { $match: { 'day' : 'March_1'}},
    { $project: {
        _id : 0,
        day: 1,
        events: {$filter: {
            input: '$events',
            as: 'event',
            cond: {$eq: ['$$event.year', '2002']}
        }}
    }}
])
Run Code Online (Sandbox Code Playgroud)

我的尝试是这样的,但失败了,我需要你的帮助。

Document query = new Document("$match", new Document("day", day)).
    append("$project", new Document("_id", 0).
            append("day", 1).
            append("events", new Document("$filter", new Document(
                    "input", "$" + category).
                    append("as", "event").
                    append("cond", new Document("$eq", Arrays.asList("$$event.year", year))))));
Run Code Online (Sandbox Code Playgroud)

我得到的错误是

"{ "ok" : 0.0, "errmsg" : "A pipeline stage specification object …
Run Code Online (Sandbox Code Playgroud)

java json mongodb mongodb-java aggregation-framework

0
推荐指数
1
解决办法
1037
查看次数

我们如何重命名 mongodb 中 groupby 查询返回的 _id 字段

我有两个模式usersLessons。我必须按每个用户获取课程组。我还将用户的参考 ID 存储在课程模式中。

为了获得结果,我按照以下格式完成了聚合查询

db.lessons.aggregate([{
  $lookup: {
    from: "users",
    localField: "user",
    foreignField: "_id",
    as: "user"
  }
}, {
  "$project": {
    "user": "$user.email",
    "title": "$title",
    "scheduled_at": "$scheduled_at"
  }
}, {
  $group: {
    _id: "$user",
    num_lessons: {
      $sum: 1
    },
    lessons: {
      $push: {
        title: "$title",
        schedule: "$scheduled_at"
      }
    }
  }
}])
Run Code Online (Sandbox Code Playgroud)

从上面的查询我能够得到如下的输出,

{
    "_id" : [ 
        "harry.quill@gmail.com"
    ],
    "num_lessons" : 1.0,
    "lessons" : [ 
        {
            "title" : "welcome to Mongoose",
            "schedule" : { …
Run Code Online (Sandbox Code Playgroud)

mongodb aggregation-framework

0
推荐指数
1
解决办法
3709
查看次数

MongoDB 连接两个集合

这是订单实体:

public class Order 
{
    @Id
    private String id;
    private String internalId;
    private String externalId;
    private String status;
}

public class OrderAssigned 
{
    @Id
    private String id;
    private String internalId;
    private String externalId;
    private String stationId;
    private String rejectStatus;
}
Run Code Online (Sandbox Code Playgroud)

我想加入这两个集合。

  • 首先我想找到stationId
  • 然后加入Orders.internalIdOrderAssigned.internalIdstatus = "OrderCreated"

就像这个 SQL 查询:

select orders.* 
from PARTNER_RESTAURANT_ORDER orders 
inner join PARTNER_RESTAURANT_ORDER_ASSIGNED_STATION assigned_station on orders.internalId = assigned_station.internalId 
where assigned_station.stationId = "5e2968e2763e750001c8ba5f" 
  and orders.status = "OrderCreated"
Run Code Online (Sandbox Code Playgroud)

mongodb spring-mongo aggregation-framework spring-mongodb

0
推荐指数
1
解决办法
8546
查看次数

将具有相同值的文档分组,并为每组获取具有最大值的文档

我有一个类似的 mongodb 集合:

{ "_id" : 1, "item" : "item1", "quantity" : 2, "date" : ISODate("2014-01-01T08:00:00Z") }
{ "_id" : 2, "item" : "item2", "quantity" : 1, "date" : ISODate("2014-02-03T09:00:00Z") }
{ "_id" : 3, "item" : "item2", "quantity" : 5, "date" : ISODate("2014-02-03T09:05:00Z") }
{ "_id" : 4, "item" : "item1", "quantity" : 10, "date" : ISODate("2014-02-15T08:00:00Z") }
{ "_id" : 5, "item" : "item2", "quantity" : 10, "date" : ISODate("2014-02-15T09:05:00Z") }
Run Code Online (Sandbox Code Playgroud)

我想获取每个项目的最新文档(基于日期值)

意味着我想要一个查询/聚合给我:

{ …
Run Code Online (Sandbox Code Playgroud)

javascript mongodb aggregation-framework

0
推荐指数
1
解决办法
41
查看次数

聚合:Mongodb 聚合查询示例

记录是数据库:

[
  {
    "title": "title1",
    "author": [
      {
        "name": "user1",
        "register": true
      },
      {
        "name": "user2",
        "register": true
      }
    ],
    "tags": [
      "tag1",
      "tag2",
      "tag3"
    ]
  },
  {
    "title": "title2",
    "author": [
      {
        "name": "user1",
        "register": true
      },
      {
        "name": "user2",
        "register": true
      }
    ],
    "tags": [
      "tag1",
      "tag2",
      "tag3"
    ]
  },
  {
    "title": "title3",
    "author": [
      {
        "name": "user1",
        "register": true
      },
      {
        "name": "user2",
        "register": true
      }
    ],
    "tags": [
      "tag1",
      "tag2",
      "tag3"
    ]
  }
]
Run Code Online (Sandbox Code Playgroud)

预期输出:

{"tag":"tag1", …
Run Code Online (Sandbox Code Playgroud)

mongoose mongodb mongodb-query aggregation-framework

0
推荐指数
1
解决办法
39
查看次数

$setIntersection 要搜索的新数组集返回匹配的计数

对于在美国发行且matos.viewer. rating 大于或等于3 的电影,计算一个名为num_favs 的新字段,该字段表示电影的演员字段中出现的最爱数量。

我不知道如何进一步进行,你能帮忙吗

 favorites = 
    ["Sandra Bullock",
    "Tom Hanks",
    "Julia Roberts",
    "Kevin Spacey",
    "George Clooney"]

     db.movies.aggregate([
   { $match:{
     'tomatoes.viewer.rating':{$gte:3},
     "countries":"USA"
         }
    }
    ]). 
Run Code Online (Sandbox Code Playgroud)

mongodb-query aggregation-framework

-4
推荐指数
1
解决办法
758
查看次数

为什么.aggregate()以相反的顺序返回键

这已经困扰了我一段时间了.MongoDB 的聚合框架是一个很好的工具,通常比.mapReduce()大多数情况更适合使用,除非后者实际上更适合.

当然,与JavaScript解释相比,它实际上使用本机C++编译中实现的方法来执行它的操作,因此在大多数情况下比mapReduce替代方案"更快".

但这里的主要问题是"结果中'反转'关键顺序的含义是什么?".至少在最后几个主要版本的情况下,如果情况并非总是这样(不是真的在这里测试每个版本,在写作时只考虑2.6.x和3.x候选版本).但它始终处于"反向"状态,这看起来非常直观,因为我将在一个例子中给出.

将基本集合视为一个简单的例子:

db.example.insert([
    { "field": "A", "value": 1 },
    { "field": "A", "value": 2 },
    { "field": "B", "value": 3 },
    { "field": "B", "value": 4 },
    { "field": "C", "value": 5 },
    { "field": "C", "value": 6 }
])
Run Code Online (Sandbox Code Playgroud)

一旦该集合到位,当您想要运行如下样本聚合操作时:

db.example.aggregate([
    { "$group": {
        "_id": "$field",
        "value": { "$sum": "$value" }
    }}
])
Run Code Online (Sandbox Code Playgroud)

然后返回的结果总是会像这样神秘地返回:

[
    { "_id" : "C", "value" : 11 },
    { "_id" : "B", "value" : 7 },
    { …
Run Code Online (Sandbox Code Playgroud)

mongodb mongodb-query aggregation-framework

-8
推荐指数
1
解决办法
510
查看次数