MongoDB查询中的动态限制

时间:2016-01-01 01:49:25

标签: mongodb database

我想为一个非常动态的集合构建一个查询。

一个例子:

我有一个像

这样的集合
{
  _id: ObjectId(),
  value: x
  // some other data
}

示例数据集的值为

{
  value: 1
},
{
  value: 1
},
{
  value: 2
},
{
  value: 3
},
{
  value: 3
}

正如您所看到的那样,可以多次使用相同的值。

但如果我运行以下查询,它只会返回第一个value: 3

db.collection.aggregate([
  {
    $sort: "$value"
  },
  {
    $limit: 4
  }
])

但我想要的是至少4个文件,其中包括所有出现的值。所以我想要所有value: 3

修改

对不起,这个问题可能有点误导。我希望得到一个完整的结果。所有有价值的东西:3。它是公共交通数据库,价值是出发时间。所以我至少需要接下来的30次离场,但是如果30和31同时离开,我也想要31次。

2 个答案:

答案 0 :(得分:1)

我现在使用一个小python函数,它可以扩展我想要的限制。由于查询返回游标我不浪费资源。我没有在查询中指定限制。

def extend_limit(cursor, original_limit):
    result = []

    try:
        while original_limit > 0:
            result.append(cursor.next())
            original_limit -= 1

        last_element = result[-1]

        while True:
            next_element = next(cursor)

            if last_element['value'] != next_element['value']:
                break

            result.append(next_element)

    except StopIteration:
        pass

    return result

感谢Adam Comerford

答案 1 :(得分:0)

此处无需使用聚合,只需使用投影,排序和限制执行普通find

db.collection.find({}, {_id : 0, value : 1}).sort({value : 1}).limit(4)

我建议您实际查询某些条件(而不是在我的示例中为空),并且条件具有适当的索引,如果可能,包括排序字段(出于性能原因)。