[英]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
此處無需使用聚合,只需使用投影,排序和限制進行常規find
:
db.collection.find({}, {_id : 0, value : 1}).sort({value : 1}).limit(4)
我建議您實際查詢一些條件(在我的示例中不要為空),並且該條件具有適當的索引,如果可能的話,該索引包括已排序的字段(出於性能原因)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.