我需要从集合中提取满足过滤器的"plate"的不同值. 目前的管道是:

[
   {
      "$match":{
         "$and":[
            {
               "tenant":"aq"                   
            },
            {
               "timestamp":{
                  "$gte":1697407200000
               }
            },
            {
               "timestamp":{
                  "$lte":1697580059999
               }
            }
         ]
      }
   },
   {
      "$sort":{
         "plate":1,
         "timestamp":1
      }
   },
   {
      "$group":{
         "_id":"$plate"
      }
   },
   {
      "$skip":0
   },
   {
      "$limit":40
   }
]

如果我不使用数据页面,聚合的输出是正确的,但使用页面的结果相当尴尬:第二个、第三个等页面包含从前一个页面返回的平板的副本.

我正在生产环境中使用4.2.20 mongodb,目前无法更新,因此如果问题与mongo版本有关,我必须找到解决办法.

你能让我明白我错在哪里吗?

推荐答案

收件箱可以在每次调用中给出不同的命令,因此在组变得多余之前进行排序的效果.因此小组赛结束后进行排序非常重要.

db.collection.aggregate([
  {
    "$match": {
      "$and": [
        { "tenant": "aq" },
        { "timestamp": { "$gte": 1697407200000 } },
        { "timestamp": { "$lte": 1697580059999 } }
      ]
    }
  },
  { "$group": { "_id": "$plate" } },
  { "$sort": { "_id": 1 } },
  { "$skip": 0 },
  { "$limit": 40 }
])

playground

Mongodb相关问答推荐

在MongoDB集合中按文档内的频率对数组排序

Next js、MongoDB和Prisma.包括不为相关字段工作

spring-data-mongodb 上的 TopN 聚合

mongo如何通过聚合加载嵌套文档

有没有一种方法可以找到一个文档并通过 Go 更改 mongodb 中的 id/value 来克隆它

查询有关 Go 项目中对象数组的 MongoDb 集合

$lookup 的参数必须是字符串

mongo shell 命令不接受使用 db 命令

从嵌套数组中 id 匹配的另一个集合中获取所有字段

MongoDB聚合多条件

如何将 json 字符串编组到 bson 文档以写入 MongoDB?

Mongoose 架构引用和未定义类型ObjectID

从 PHP 打印 MongoDB 日期

mongoose通过引用属性查找文档

oplog 在独立 mongod 上启用,不适用于副本集

如何使用 mongodb 和 php 正确处理分页查询?

为什么我新创建的 mongodb 本地数据库增长到 24GB?

我如何使用 Twitter 的流 api 中的推文并将它们存储在 mongodb 中

如何在 MongoDB 中删除此弃用警告,为什么会这样?

mongoose — 判断 ObjectId 是否存在于数组中