我正在通过解析器运行GraphQl变异。这是与Neo4j数据库的对比。该查询运行良好,但是我无法以在结果中显示的方式组织结果。我已经尝试了几种不同的结果和记录映射组合,但是我无法在输出中显示返回结果集的属性。
具体来说,在下面的示例中,您将看到响应中的name字段(通过GraphiQL)在我希望将其设置为返回值时为空。
解析器:
AddIdiomHasChildIdiom(object, params, ctx, resolveInfo) {
//************************************************************************************************************************************
//** Author: MOS
//** Date: 22/07/2019
//** Description: Add a child Idiom
//************************************************************************************************************************************
//Build the cypher query across multiple lines so that we can adjust the query depending on which parameters are passed
let query = new StringBuilder();
query.appendLine("MATCH (p:entity:Idiom {id:'" + params.from.id + "'}), (c:entity:Idiom {id:'" + params.to.id + "'})")
query.appendLine("MERGE (p)-[r:HAS_CHILD_IDIOM]->(c)")
query.appendLine("RETURN p,c")
console.log(query)
//Execute the query and send the results back to the user
return ctx.driver.session().run(query.toString(), {props:params})
.then(result => {
return {
from: result.records.map(record => { return record.get("p").properties}),
to: result.records.map(record => { return record.get("c").properties})
}
})
.catch(error => {
//ToDo: Error handling code need to go here
})
}
GraphQL查询
mutation{
AddIdiomHasChildIdiom(from:{id:"d94676b0-ac6c-11e9-a7a1-edf120d553ac"},to:{id:"e730a720-ac74-11e9-a45f-df629a6df5e1"})
{
from{
name
}
to{
name
}
}
}
输出:
{
"data": {
"AddIdiomHasChildIdiom": {
"from": {
"name": null
},
"to": {
"name": null
}
}
}
}
相关架构部分
type Mutation{
AddIdiomHasChildIdiom(
from: _IdiomInput!
to: _IdiomInput!
): _AddIdiomHasChildIdiomPayload
}
type _AddIdiomHasChildIdiomPayload {
from: Idiom
to: Idiom
}
input _IdiomInput {
id: ID!
}
type _AddIdiomHasChildIdiomPayload {
from: Idiom
to: Idiom
}
type Idiom {
id: ID
name: String
type: IdiomType
description: String
lifecycle: IdiomLifecycle
quality: Float
numStates: Int
numChildIdioms: Int
hasChildIdiom: [Idiom]
first: Int
offset: Int
orderBy: [_IdiomOrdering]
}
您的代码中的问题是您的图形ql模式和解析器的实现之间的类型不匹配。
您的突变查询应该返回以下内容:
type _AddIdiomHasChildIdiomPayload {
from: Idiom
to: Idiom
}
您的解析器返回以下内容:
return {
from: result.records.map(record => { return record.get("p").properties}),
to: result.records.map(record => { return record.get("c").properties})
}
这里你使用的是map
函数,它的结果是一个数组。所以你返回的是这样的东西:
{
from : [ { id:'', name:'', ... } ]
to : [ { id:'', name:'', ... } ]
}
和<代码>[ { id:'',名称:' ',...} ]不验证模式的< code >习语类型,它是一个数组:< code >习语[]。
因此,您需要更改解析器以仅返回一个元素 from
此外,你的实现很奇怪:由于使用了两个映射并且你没有关闭会话,你正在对 Neo4j 的结果执行两个循环。
你应该尝试这样的事情:
const session = ctx.driver.session();
return session.run(query.toString(), {props:params})
.then(result => {
return result.records.map(record => {
return {
from:record.get("p").properties
to:record.get("c").properties
}
})[0]
})
.catch(error => {
//ToDo: Error handling code need to go here
})
.finally(() => {
session.close();
})
而且
我有一个自定义案例类异常: 在我的 dao 中,我有一个从数据库中提取对象的方法,该方法返回 future,如果此将来失败,我将抛出我的 RecordNotFoundException 异常: 在另一个方法中,我调用getPerson方法,所以我将恢复添加到另一个方法中,当未来使用RecordNotFoundException失败时,我想返回一些东西: 因此,基本上,我希望当getPerson失败
我正在使用spring Roo并希望访问Controller类中的一个bean,该类在ApplicationContext.xml中具有以下配置: 配置类本身是: 在我的Controller中,我认为一个简单的Autowired注释应该可以完成这项工作 在启动过程中,spring在setSkipWeeks方法中打印消息。不幸的是,每当我在控制器中调用config.getSkipWeeks()时,它
当我运行以下程序时,它只打印 然而,从Java 8的equalsIgnoreCase文档中我们发现: 如果以下至少一项为真,则两个字符c1和c2被视为相同的忽略情况: •对每个字符应用java.lang.character.ToUpperCase(char)方法会产生相同的结果 所以我的问题是为什么这个程序不打印 在这两种操作中,都使用了大写字符。
我试图使用来传输我根据前面的问题设置的自定义标头。 我在文件中读到... 我的属性包括:
我正在和selenium一起工作,刮一些数据。 有一个按钮在页面上,我正在点击说“Custom_Cols”。这个按钮为我打开了一个窗口,我可以在那里选择我的列。 我的问题是为什么新窗口上的元素不可见,即使我正在等待元素的可见。补充一下,我已经尝试增加延迟时间,但我还是会偶尔出现这个错误。 我的密码在这里