我有一个名为"Users"的mongodb集合,我想创建一个查询,以获取这个集合中的第一个和最后一个文档,这些文档基于一个名为InsertedAt的日期时间字段. 我知道如何使用sort获取第一个和最后一个元素,但我想在一个查询中返回这两个记录,如下所示:

[
    {
        _id: ObjectId("65c656fd8651a89640db013a"),
        insertedAt: ISODate("2023-02-01T16:46:33.166Z"), // First record of collection
        name: "Bob Jhonson"
    },
    {
        _id: ObjectId("65c4d88a2a06618ad4e972f4"),
        insertedAt: ISODate("2023-03-11T12:16:33.166Z"), // Last record of collection
        name: "Bob Jhonson"
    }
]

我该怎么办?

推荐答案

只需将您的2个查询与$unionWith个链接起来

db.collection.aggregate([
  {
    "$sort": {
      "insertedAt": 1
    }
  },
  {
    $limit: 1
  },
  {
    "$unionWith": {
      "coll": "collection",
      "pipeline": [
        {
          "$sort": {
            "insertedAt": -1
          }
        },
        {
          $limit: 1
        }
      ]
    }
  }
])

Mongo Playground

Mongodb相关问答推荐

Mongo聚合项目数组交集

从两个相连的文件中获取电话和邮箱的渠道是什么?

对对象数组进行分组并在 mongodb 中获取计数

Mongodb Timeseries / Golang - ['timestamp' 必须存在并包含有效的 BSON UTC 日期时间值]

如何修改 mongodb 中嵌套对象数组中的字段名称/键?

在MongoDb的数组中计算大于某个数字的数字

使用 mongodb 时是否需要规范化数据库?

MongoDB中的readPreference和readConcern有什么区别?

MongoDB 列表 - 获取每第 N 个元素

如何在 Mongo 聚合中合并文档中的数组字段

使用 EventSourcing(NodeJS、MongoDB、JSON)跨多个偶尔连接的客户端同步数据

如何在 MongoDb 中使用杰克逊将日期字段存储为 ISODate()

MongoDB 1.6.5:如何重命名集合中的字段

从性能Angular 来看 MongoDB 嵌入式与参考

NodeJS中的密码重置

为什么使用 Redis 而不是 MongoDb 进行缓存?

Mongo Schema-less集合和 C#

获取 mongodb 中所有唯一标签的列表

MongoTemplate upsert - 从 pojo 进行更新的简单方法(哪个用户已编辑)?

MongoDB Compass timeouts超时