GraphQL:获取部分字符串匹配

Posted

技术标签:

【中文标题】GraphQL:获取部分字符串匹配【英文标题】:GraphQL: Get partial string matches 【发布时间】:2018-04-06 22:52:39 【问题描述】:

我正在通过 graphQL 访问一个 mongoDB 集合。这是数据库数据:


    "_id" : ObjectId("59ee1be762494b1df1dfe30c"),
    "itemId" : 1,
    "item" : "texture",
    "__v" : 0


    "_id" : ObjectId("59ee1bee62494b1df1dfe30d"),
    "itemId" : 1,
    "item" : "pictures",
    "__v" : 0

查询 todo(item: "texture") itemId, item 导致


  "data": 
    "todo": [
      
        "itemId": 1,
        "item": "texture"
      
    ]
  

但我需要找到部分匹配给定字符串的数据集。 所以字符串tur 应该导致两个数据集:texture, pictures

我的 graphQL Schema 如下所示:

var schema = new GraphQLSchema(
  query: new GraphQLObjectType(
    name: 'RootQueryType',
    fields: 
      todo: 
        type: new GraphQLList(todoType),
        args: 
          item: 
            name: 'item',
            type: new GraphQLNonNull(GraphQLString)
          
        ,
        resolve: (root, item, source, fieldASTs) => 
          var projections = getProjection(fieldASTs)
          var foundItems = new Promise((resolve, reject) => 
            ToDoMongo.find(item, projections, (err, todos) => 
              err ? reject(err) : resolve(todos)
            )
          )
          return foundItems
        
      
    
  )
)

【问题讨论】:

你能粘贴ToDoMongo.find方法代码吗?我们需要知道您是如何构建查询的,因为必须对其进行调整以支持您想要的。 @cbartosiak 在发布的架构中,您会看到 resolve() 代码。在那里你看到ToDoMongo.find()。所以我必须使用正则表达式? 是的,正则表达式是 Mongo find 方法的输入。做你感兴趣的工作是 Mongo 的责任。 【参考方案1】:

一般来说,你必须像下面这样构造(mongo)查询:

 "item": /tur/ 

这是$regex 运算符的简短语法。您应该在 ToDoMongo.find 方法代码中构造此查询。

【讨论】:

以上是关于GraphQL:获取部分字符串匹配的主要内容,如果未能解决你的问题,请参考以下文章

js 正则获取匹配部分最后一个内容

正则表达式如何获取匹配的部分

在javascript匹配中获取正则表达式的单独部分[重复]

pandas str.contains 匹配多个字符串并获取匹配的值

GraphQL 解析器,用于按名称而不是 ID 获取项目

正则表达式 - (?!), (?:), (?=)