![](/img/trans.png)
[英]Get a count of total documents with MongoDB aggregation when using limit
[英]MongoDB get total count aggregation pipeline with $search
我必須使用 MongoDB Atlas 中的搜索索引以及普通瀏覽功能來實現搜索。 這包括過濾、匹配、排序、跳過、限制(分頁)。 我制作了一個聚合管道來實現這一切。 首先我將搜索查詢推送到我的管道,然后匹配,然后排序,然后跳過,最后是限制查詢。
這是它的過程:
query = [];
query.push({
$search: {
index: 'default'
text: {
query: searchQuery
path: { }
}
}
});
query.push({
$sort: sort,
});
query.push({
$match: {
type: match
},
query.push({
$skip: skip
});
query.push({
$limit: perPage
});
let documents = await collection.aggregate(query);
到目前為止我得到的結果是正確的。 但是,對於分頁,我還想獲取文檔總數。 計數必須考慮“匹配”和“searchQuery”(如果有)。 我試過$facet
但它給出了錯誤$_internalSearchMongotRemote is not allowed to be used in a $facet stage
所以,我看到了這個查詢的一些挑戰。
可能不需要$sort
階段。 默認情況下,所有搜索查詢都按相關性分數排序。 如果您需要根據其他一些標准進行排序,那么它可能是合適的。
可能不需要$match
階段。 大多數人在嘗試匹配時正在尋找的是復合過濾器。 正如您從文檔中看到的, filter
行為類似於普通 MongoDB 中的$match
。 從我所在的位置來看,您的查詢可能類似於:
如果您想對返回的文檔進行快速計數,則需要使用新的計數運算符。 它在4.4.11
和5.0.4
集群上可用。 你可以在這里閱讀它。
query = [];
query.push({
$search: {
index: 'default'
"compound": {
"filter": [{
"text": {
"query": match,
"path": type
}
}],
"must": [{
"text": {
"query": searchQuery,
"path": { }
}
}]
},
"count": {
"type": "total"
}
}
});
query.push({
$skip: skip
});
query.push({
$limit: perPage
});
let documents = await collection.aggregate(query);
[1]: https://docs.atlas.mongodb.com/reference/atlas-search/compound/#mongodb-data-filter
[2]: https://docs.atlas.mongodb.com/reference/atlas-search/counting/#std-label-count-ref
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.