簡體   English   中英

MongoDB查詢中的動態限制

[英]Dynamic limit in MongoDB query

我想為一個非常動態的集合建立一個查詢。

一個例子:

我有一個像

{
  _id: ObjectId(),
  value: x
  // some other data
}

示例數據集具有值

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

如您所見,相同的值可以存在多次。

但是,如果我運行以下查詢,它將僅返回帶有value: 3的第一個value: 3

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

但是我想要的是至少4個文檔,其中包含所有出現的值。 所以我想要所有value: 3

編輯

抱歉,這個問題可能會引起誤解。 我想要一個完整的結果。 因此,所有這些值:3.用於公共交通數據庫,值是出發時間。 所以我至少要再下30個出發,但是如果30和31同時出發,我也要31。

我現在使用一個小的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

此處無需使用聚合,只需使用投影,排序和限制進行常規find

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

我建議您實際查詢一些條件(在我的示例中不要為空),並且該條件具有適當的索引,如果可能的話,該索引包括已排序的字段(出於性能原因)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM