当前位置: 首页 > 知识库问答 >
问题:

在Mongo Db查询上需要帮助以获取数据

袁单鹗
2023-03-14
{
    "_id" : ObjectId("611a11a09500700009d09a12"),
    "userId" : "abc",
    "createdAt" : ISODate("2021-08-14T07:22:00.535Z"),
    "isActive" : true,
    "isEligible" : true
},
{
    "_id" : ObjectId("611a11a09500700009d09a13"),
    "userId" : "abc",
    "createdAt" : ISODate("2021-08-15T07:20:00.535Z"),
    "isActive" : true,
    "isEligible" : true
},
{
    "_id" : ObjectId("611a11a09500700009d09a14"),
    "userId" : "def",
    "createdAt" : ISODate("2021-08-15T07:22:00.535Z"),
    "isActive" : true,
    "isEligible" : true
},
{
    "_id" : ObjectId("611a11a09500700009d09a15"),
    "userId" : "abc",
    "createdAt" : ISODate("2021-08-16T07:18:00.535Z"),
    "isActive" : true,
    "isEligible" : true
},
{
    "_id" : ObjectId("611a11a09500700009d09a16"),
    "userId" : "abc",
    "createdAt" : ISODate("2021-08-16T07:20:00.535Z"),
    "isActive" : true,
    "isEligible" : true
}
{
    "_id" : ObjectId("611a11a09500700009d09a17"),
    "userId" : "def",
    "createdAt" : ISODate("2021-08-16T07:22:00.535Z"),
    "isActive" : true,
    "isEligible" : true
}
  1. 选择createdAt大于或等于“2021-08-15t00:00:00.000z”的记录
  2. 对于每个用户ID,只返回最新的记录,即按desc顺序按createdAt排序的记录。
  3. 返回的文档应该具有原始文档中的所有键。键的数量可能比文档中显示的要多得多。因此,查询应该自动返回所有键。

下面是所需的示例输出:

{
    "_id" : ObjectId("611a11a09500700009d09a16"),
    "userId" : "abc",
    "createdAt" : ISODate("2021-08-16T07:20:00.535Z"),
    "isActive" : true,
    "isEligible" : true
}
{
    "_id" : ObjectId("611a11a09500700009d09a17"),
    "userId" : "def",
    "createdAt" : ISODate("2021-08-16T07:22:00.535Z"),
    "isActive" : true,
    "isEligible" : true
}

共有1个答案

东郭宏朗
2023-03-14

您可以使用此聚合阶段:

  • 第一个$match只获取日期大于或等于所需日期的文档。
  • 然后$sort按desc顺序设置第一个位置值。
  • 和最后一个$groupbyuserid只获得第一个值(按照-1的顺序,第一个值将根据desc的顺序)
db.collection.aggregate([
  {
    "$match": {
      "createdAt": {
        "$gte": ISODate("2021-08-15T00:00:00.000Z")
      }
    }
  },
  {
    "$sort": {
      "createdAt": -1
    }
  },
  {
    "$group": {
      "_id": "$userId",
      "createdAt": {
        "$first": "$createdAt"
      }
    }
  }
])

这里的示例

 类似资料:
  • 问题内容: 我有以下示例字符串 我只对 test6IAmInterestedIn 感兴趣,它位于第四个斜杠之后,可以包含3个字符,多个字母并以3个数字结尾,即。 我想在上述正则表达式中添加的内容是,我总是在匹配的第四个斜杠之后选择字符串。我该怎么办? 问题答案: 你可以试试这个演示 哪里 匹配包含正斜杠的4个块 捕捉您想要的图案

  • 我的问题类似于SQL选择组查询。但是架构发生了变化,我想要不同的结果,如下所述。给定链接的解决方案没有给我正确的解决方案。您可以使用SQL小提琴来解决这个问题。 下面是我的桌子 表1 现在,我想显示每个产品的两个最低金额,如果金额相同,那么任何人都按照升序排列... 所以我想构建单个SQL查询,它给我的结果如下。 请帮我建立这样的查询。

  • 我有这张桌子: 这是我的SQL查询: 我想要的查询是: > 我希望获得符合某些条件的记录,特别是字段在最近24小时内的记录 我需要获得紧接在#1中的记录之前的记录 将#1中的结果进一步过滤到其价格列在记录的历史记录中具有不同值(而不是-1)的记录 我面临的问题是查询太慢了。我有一百万张唱片。执行查询大约需要2分钟。我猜GROUP BY会使查询变慢。我想我需要做一个综合指数,但我不知道怎么做。 解释

  • 问题内容: 怀疑在VBA ADO和Sql查询中… 我有2张纸,即adodc1,adodc2(在一本工作簿中) 在adodc1中具有“名称”,“部门”列,有时其具有“ Sect”列 在adodc2中具有“名称”,“部门”,“宗派”列 我想要的是当我运行Query..Vba时需要检查adodc1是否具有Sect列。 要返回为空值.. 下面的代码取自“”,根据我的需要进行了更改 它将执行的工作是来自两张

  • 编写一个查询以显示staffid、费用代码、专科id、专科名称、会诊日期、患者号和到期日将使用会诊日期+21计算 STAFFID NOT NULL CHAR(2) FIRSTNAME VARCHAR2(20) LASTNAME VARCHAR2(20) 角色VARCHAR2(15) 性别CHAR(1) 日期连接日期 DATELEFT DATE SQL>描述staffspeciality错误: OR

  • 问题内容: 我正在使用Glassfish和JSF构建我的第一个Java EE Web应用程序。我对条件查询还很陌生,我有一个需要执行的查询,但是javaee6教程的示例似乎有些稀疏。无论如何,我很难创建查询。 目标:我想让公司存储最多的文件。公司与Documents有OneToMany关系。文档与多个表具有ManyToOne关系,“用户类型”列将它们区分开。 MySQL查询: 谢谢 --updat