0

以下代码旨在查询Dgraph服务器以获取与特定节点关联的值,类似于在关系数据库中通过主键查找行。

const dgraph = require("dgraph-js");
const grpc = require("grpc");
const clientStub = new dgraph.DgraphClientStub( grpc.credentials.createInsecure() );
const dgraphClient = new dgraph.DgraphClient(clientStub);

const lookupNode = `query nodeValues($id:uid) {
    nodeValues(func: uid($id)) {
        value1,
        value2,
        value3
    }
}`;
const res = await dgraphClient.newTxn().queryWithVars(query, {$id: "0x13");

执行时会引发此问题Error: 2 UNKNOWN: Type "uid" not supported。如果$id变量键入为 astring或未int找到结果。如何通过 UID 查询具有变量的节点?

4

2 回答 2

0
const dgraph = require("dgraph-js");
const grpc = require("grpc");
const clientStub = new dgraph.DgraphClientStub( grpc.credentials.createInsecure() );
const dgraphClient = new dgraph.DgraphClient(clientStub);

const lookupNode = `query nodeValues(**$id:string**) {
    nodeValues(func: uid($id)) {
        value1,
        value2,
        value3
    }
}`;
const res = await dgraphClient.newTxn().queryWithVars(query, {$id: "0x13");

使用 String 作为您的 uid 的数据类型 :)

于 2021-05-31T04:25:08.810 回答
0

在这种情况下,查询变量的类型$id应该是string。查看您拥有的实际输出会很有帮助。不过,我认为您的示例中的异步函数存在问题。以下代码为我提供了所需的输出{ nodeValues: [ { value1: 'value1' } ] }

const dgraph = require("dgraph-js");
const grpc = require("grpc");
const clientStub = async () => new dgraph.DgraphClientStub("localhost:9080", grpc.credentials.createInsecure());
const dgraphClient = async (clientStub) => new dgraph.DgraphClient(clientStub);

async function createData(dgraphClient) {
    const txn = dgraphClient.newTxn();
    try {
        const p = {uid: "0x13", value1: "value1"};
        const mu = new dgraph.Mutation();
        mu.setSetJson(p);
        await txn.mutate(mu);
        await txn.commit();
    } finally {
        await txn.discard();
    }
}

const lookupNode = `query nodeValues($id:string) {
    nodeValues(func: uid($id)) {
        value1,
        value2,
        value3
    }
}`;
const res = async (dgraphClient) => {
    const response = await dgraphClient.newTxn().queryWithVars(lookupNode, {$id: "0x13"});
    return response.getJson();
};

const main = async () => {
    const stub = await clientStub();
    const client = await dgraphClient(stub);
    await createData(client);
    return await res(client);
};

main().then((res) => {
    console.log(res);
}).catch((e) => {
    console.log("ERROR: ", e);
});

基于官方支持的客户端的示例:https ://github.com/dgraph-io/dgraph-js/blob/master/examples/simple/index.js

于 2020-01-31T11:34:53.730 回答