GraphQL,Relay和Mongodb(mongoose)如何获取数组

时间:2016-07-06 20:56:14

标签: mongodb mongoose graphql relayjs graphql-js

我无法使用mongoose获取数组或对象以在Relay连接中使用它,实际上这很好用:

let queryType = new GraphQLObjectType({
    name: 'Query',
    fields: () => ({
        getUsers: {
            type: new GraphQLList(userType),
            resolve: (_, args) => {
                return new Promise((resolve, reject) => {
                    Users.find(args, (err, users) => {
                        err ? reject(err) : resolve(users);
                    });
                });
            }
        }
    })
});
在GraphiQL中我可以获得数组。但是,当我尝试使用相同的"解决"使用Relay功能它不起作用!

getUsers: {
    node: nodeField,
    type: usersType,
    resolve: (_, args) => {
        return new Promise((resolve, reject) => {
            Users.find(args, (err, users) => {
                err ? reject(err) : resolve(users);
            });
        });
    }
}

我认为原因是因为Users.find()返回Promise而不是Array或Obj。 如果我只是更改" Users.find()"使用返回数组的任何其他函数都可以正常工作。

所以主要的问题是如何使用" Users.find()"来获取数组或对象?而不是承诺? (,lean(),. exec())也没有帮助。

1 个答案:

答案 0 :(得分:1)

npm i graphql-relay-connection --save
const {connectionFromPromisedArray} = mongooseConnection;

而不是connectionFromArray(get(), args)我们可以通过Promise:connectionFromPromisedArray(collection.find(), args)

最后,您可以从Promise获取数组而无需大量代码。