Graphql 猫鼬不喜欢的图形';不能执行类似的查询

Graphql 猫鼬不喜欢的图形';不能执行类似的查询,graphql,Graphql,我很高兴发现graphql compose,并开始在projet中使用它。实际上,我在查询比教程中提到的更复杂的查询时遇到了一个问题。例如,我想对mongoose表执行一个like查询。如果我将教程示例修改为使用名称进行过滤,则一切正常 { userMany(filter: { name: "MICHA" }, limit: 5, sort: _ID_ASC) { name languages { language skill } co

我很高兴发现graphql compose,并开始在projet中使用它。实际上,我在查询比教程中提到的更复杂的查询时遇到了一个问题。例如,我想对mongoose表执行一个like查询。如果我将教程示例修改为使用名称进行过滤,则一切正常

{
  userMany(filter: { name: "MICHA" }, limit: 5, sort: _ID_ASC) {
    name
    languages {
      language
      skill
    }
    contacts {
      email
    }
    gender
    age
  }
}
但是,如果我试图使用正则表达式,我会立即陷入我的查询所在的位置

{
  userMany(filter: { name: "/MICH/i" }, limit: 5, sort: _ID_ASC) {
    name
    languages {
      language
      skill
    }
    contacts {
      email
    }
    gender
    age
  }
}

p、 s:很抱歉,我不得不使用graphql标记而不是graphql compose,因为后者仍然不存在,而且我没有足够的积分来创建它:-(

我找到了上面评论中提到的解决方案:

import { composeWithMongoose } from 'graphql-compose-mongoose';
import {  composeWithRelay } from 'graphql-compose-relay';
import { schemaComposer } from 'graphql-compose';

const Entity = require ('../db/entity').default

const customizationOptions = {}; // left it empty for simplicity, described below
const EntityTC = composeWithRelay(composeWithMongoose(Entity, customizationOptions));

//export const ProductTC = composeWithRelay(composeWithMongoose(Product));

//TODO make this function evolve to allow filtering on a specified field in params
//Found in https://github.com/graphql-compose/graphql-compose-examples/blob/master/examples/northwind/models/product.js#L38,L49
const addEntityNameRegexpSearch = function () {
    const extendedResolver = EntityTC.getResolver('findMany').addFilterArg({
        name: 'nameRegexp',
        type: 'String',
        description: 'Search by name in regExp',
        query: (query, value, resolveParams) => { // eslint-disable-line
            query.name = new RegExp(value, 'i'); // eslint-disable-line
        },
    });
    extendedResolver.name = 'findMany';
    EntityTC.addResolver(extendedResolver);
};
addEntityNameRegexpSearch()

schemaComposer.rootQuery().addFields({
    entityById: EntityTC.getResolver('findById'),
    entityByIds: EntityTC.getResolver('findByIds'),
    entityOne: EntityTC.getResolver('findOne'),
    entityMany: EntityTC.getResolver('findMany'),
    entityCount: EntityTC.getResolver('count'),
    entityConnection: EntityTC.getResolver('connection'),
    entityPagination: EntityTC.getResolver('pagination'),
});

schemaComposer.rootMutation().addFields({
    entityCreate: EntityTC.getResolver('createOne'),
    entityUpdateById: EntityTC.getResolver('updateById'),
    entityUpdateOne: EntityTC.getResolver('updateOne'),
    entityUpdateMany: EntityTC.getResolver('updateMany'),
    entityRemoveById: EntityTC.getResolver('removeById'),
    entityRemoveOne: EntityTC.getResolver('removeOne'),
    entityRemoveMany: EntityTC.getResolver('removeMany'),
});

const graphqlSchema = schemaComposer.buildSchema();
export default graphqlSchema;
我修改了查询以对应于方法参数:

const queries = {
    SHOP_LIST: gql `
                                    query entityMany($name: String!){
                                        entityMany(filter: { nameRegexp: $name }, limit: 3){name}
                                    }
                                `
}
我用同样的方法:

<Query query={queries.SHOP_LIST} variables={{name:this.state.name}}>


我发现这个链接稍微谈到了这个问题。这个链接可能是解决方案:您是用实际的findById函数替换“findById”,还是已经内置了?例如entityById:EntityTC.getResolver('findById')我正在使用内置函数