我有同樣的問題。所以,我決定寫一個npm
包來解決這個問題。
可以使用fast-relay-pagination NPM包進行排序,向後和向前pagination
和過濾Mongoose
模型或MongoDB
對象。
這個包提高graphql-relay
懶加載使用Mongoose
或MongoDB
查找和限制。如您所知,graphql-relay's
connectionFromArray
會提取所有數據並對數據執行切片,這對於大數量來說效率不高。
你可以看到在下面的例子:
...
import {
fetchConnectionFromArray
} from 'fast-relay-pagination'
...
export default{
type: orderConnection.connectionType,
args: {
...connectionArgs,
orderFieldName: {
type: GraphQLString,
},
sortType: {
type: GraphQLInt,
},
},
resolve: needAdmin(async (_, args) => {
let orderFieldName = args.orderFieldName || '_id'
let sortType = args.sortType || -1
let after = args.after
let before = args.before
let filter = args.filter
let first = args.first
let last = args.last
return fetchConnectionFromArray({
dataPromiseFunc: SampleModel.find.bind(SampleModel), // required
filter, // optional (for using filter on model collection) - for example => {username: 'test'}
after, //optiona
before, // optional
first, //optional
last, // optional
orderFieldName, // optional
sortType, // optional
})
}),
}
我不認爲我正確地解釋了我的關注,這裏有一個更具體的例子:你有相同的中繼分頁列表上的兩種觀點,按不同的字段排序。兩個列表中都會出現相同的對象,但具有不同的遊標。你有一個突變來創建一個對象,用一個'RANGE_ADD'來爲這兩個視圖指定不同的行爲。服務器端的突變必須在響應中返回一個單獨的遊標;這兩個遊標中的哪一個會返回,另一個視圖是做什麼的,因爲它根本沒有遊標? – Evan
好點。我們可能沒有在內部遇到這種情況,因爲我們尚未在採用這種參數的連接上構建突變。讓我們再次重新打開[你原來的GitHub問題](https://github.com/facebook/relay/issues/760),看看我們能否找出解決方案。 – wincent
您可以預先設定並追加,但是如何將項目從第三個位置上下放置?例如,你有一個按[A,B,D]的名稱排序的東西,並且你添加了C? – FabioCosta