【问题标题】:Query - Set limit base on specific field in mongodb查询 - 根据 mongodb 中的特定字段设置限制
【发布时间】:2020-04-22 18:16:40
【问题描述】:

查询 - 在restrict_id = 13546456566 时不显示数据

假设我们有一个集合,其中有一个字段名称 restrict_id ,值为 13546456566 我不想显示数据之前的任何数据,restrict_id 具有下一个值,它将显示如何进行此查询 mongodb

  {
    "_id": ObjectID("5e9eb49efc81c83087396ff2"),
    "group_id": ObjectID("5e4e755b380054797d9db627"),
    "date": 1587459230192,
    "text": "First"
}

{
    "_id": ObjectID("5e9eb49efc81c83087396ff2"),
    "group_id": ObjectID("5e4e755b380054797d9db627"),
    "date": 1587459230192,
    "text": "Second"
}

{
    "_id": ObjectID("5e9eb49efc81c83087396ff2"),
    "group_id": ObjectID("5e4e755b380054797d9db627"),
    "restrict_id": "13546456566"
    "date": 1587459230192,
    "text": "Third"
}

{
    "_id": ObjectID("5e9eb49efc81c83087396ff2"),
    "group_id": ObjectID("5e4e755b380054797d9db627"),
    "date": 1587459230192,
    "text": "Fourth"
}

所以在这里我的纹理集合说你可以跳过认为相同的 Object _id 它复制的那些是不同的但问题是我想跳过所有前三个因为它有标志 restrict_id = 13546456566 只显示第四个文本值这在 mongodb 中如何可能

【问题讨论】:

  • 您能否编辑您的问题以使其更易于理解?它不清楚你想做什么。另外,您的标题谈到了限制,但您的问题描述没有谈到任何此类事情
  • 一些示例数据和预期输出也会非常有帮助。
  • 是的,更新的问题请看一下

标签: mongodb


【解决方案1】:

除非对文档进行排序,否则“是否有任何先前看到的文档包含此值”的区别是没有意义的。

MongoDB 没有任何类型的查询状态变量可以设置为 true 并在文档之间持续存在以表明这种情况已经发生。

使用聚合您可以: - 对文档进行排序 - 将它们全部推入一个数组 - 减少数组以建立一个应用条件的新数组 - 展开数组 - 将文件恢复到之前的状态

db.collection.aggregate([
  {$sort:{sortField:1}},
  {$group:{
           _id:null, 
           documents:{$push:"$$ROOT"}
  }},
  {$project:{
             keepers:{
                $reduce:{
                         input:"$documents",
                         initialValue:{keep:false,documents:[]},
                         in:{
                              keep:{$or:[
                                         "$$value.keep",
                                         {$eq:["$$this.restrict_id","13546456566"]}
                         ]},
                         documents:{
                            $cond:[
                               "$$value.keep",
                               {$concatArrays:["$$value.documents",["$$this"]]},
                               []
                            ]}
                         }
                }
            }
  }},
  {$unwind:"$keepers.documents"},
  {$replaceRoot:{newRoot:"$keepers.documents"}}
])

Playground

【讨论】:

  • 如果没有restrict_id怎么办?将在那种情况下显示所有我猜不,如果有 restrict_id="" 或不存在,它应该显示所有
猜你喜欢
  • 1970-01-01
  • 2011-06-18
  • 1970-01-01
  • 2014-12-04
  • 1970-01-01
  • 2012-11-20
  • 2015-04-24
  • 2022-08-14
  • 1970-01-01
相关资源
最近更新 更多