Please check if I have defined the schema correctly or not? Neptune schema creation failed: TypeError: g.V(...).hasLabel(...).as(...).V(...).hasLabel(...).as(...).addE(...).from is not a function

0

I am using gremlin to define schema in my nodejs project using AWS sdk and the initial connection I have established using NeptuneClient.

const gremlin = require('gremlin');
const DriverRemoteConnection = gremlin.driver.DriverRemoteConnection;
const createNodes = require('./nodes');
const createEdges = require('./edges');

const dotenv = require('dotenv');
dotenv.config();

async function createNeptuneSchema() {
  const ClusterEndpoint = process.env.CLUSTER_ENDPOINT;
  const Port = 8182;

  const dc = new DriverRemoteConnection(`wss://${ClusterEndpoint}:${Port}/gremlin`, {});
  const g = new gremlin.structure.Graph().traversal().withRemote(dc);

  // Create nodes
  await createNodes(g);

  // Create edges
  await createEdges(g);

  console.log('Schema creation complete.');
  dc.close();
}

module.exports = createNeptuneSchema;


nodes.js
const gremlin = require("gremlin");

async function createNodes(g) {
  // Define Company node with attributes
  await g
    .addV("Company")
    .property("companyNumber", "string")
    .property("companyType", "string")
    .property("registryURL", "string")
    .property("incorporationDate", "date")
    .property("dissolutionDate", "date")
    .property("status", "string")
    .property("employeeCount", "integer")
    .property("annualRevenue", "decimal")
    .property("taxNumber", "string")
    .property("industry", "string")
    .property("DUNSNumber", "string")
    .property("legalEntityIdentifier", "string")
    .property("aliasName", "string")
    .property("reliabilityScore", "decimal")
    .next();

  // Define Address node with attributes
  await g
    .addV("Address")
    .property("line1", "string")
    .property("line2", "string")
    .property("city", "string")
    .property("state", "string")
    .property("postcode", "string")
    .property("reliabilityScore", "decimal")
    .next();

  // Define TradingAddress node with attributes
  await g
    .addV("TradingAddress")
    .property("fromDate", "date")
    .property("toDate", "date")
    .next();

  // Define PreviousAddress node with attributes
  await g
    .addV("PreviousAddress")
    .property("fromDate", "date")
    .property("toDate", "date")
    .next();

  // Define CurrentAddress node with attributes
  await g
    .addV("CurrentAddress")
    .property("fromDate", "date")
    .property("toDate", "date")
    .next();

  // Define Country node
  await g
    .addV("Country")
    .property("name", "string")
    .property("lat", "string")
    .property("lng", "string")
    .next();

  // Define PEP node with attributes
  await g
    .addV("PEP")
    .property("politicalPosition", "string")
    .property("gender", "string")
    .property("DOB", "date")
    .property("URL", "string")
    .property("chamber", "string")
    .property("otherInfo", "string")
    .property("institutionType", "string")
    .property("function", "string")
    .next();

  await g.addV("PoliticalParty").next();

  // Define Sanctions node with attributes
  await g
    .addV("Sanctions")
    .property("listName", "string")
    .property("listURL", "string")
    .property("listDate", "date")
    .property("removeDate", "date")
    .property("relatedURL", "string")
    .property("program", "string")
    .property("remark", "string")
    .next();

  await g.addV("Offshore").next();
  await g.addV("News").next();
  await g.addV("SearchEngineMedia").next();

  // Define Adverse Media node with attributes
  await g
    .addV("AdverseMedia")
    .property("URL", "string")
    .property("title", "string")
    .property("snippit", "string")
    .property("publicationDate", "date")
    .property("source", "string")
    .property("risk", "string")
    .property("publisherName", "string")
    .property("factivaDocumentId", "string")
    .property("language", "string")
    .property("imageLink", "string")
    .next();

  // Define Dark Web node with attributes
  await g
    .addV("DarkWeb")
    .property("name", "string")
    .property("email", "string")
    .property("phone", "string")
    .property("username", "string")
    .next();

  // Define Person node with attributes
  await g
    .addV("Person")
    .property("firstName", "string")
    .property("middleName", "string")
    .property("lastName", "string")
    .property("DOB", "date")
    .next();

  // Define Filing node with attributes
  await g
    .addV("Filing")
    .property("filingType", "string")
    .property("description", "string")
    .property("date", "date")
    .property("title", "string")
    .property("source", "string")
    .next();

  // Define Email node with attributes
  await g
    .addV("Email")
    .property("domain", "string")
    .property("type", "string")
    .property("reliabilityScore", "decimal")
    .next();

  // Define PhoneNumber node with attributes
  await g
    .addV("PhoneNumber")
    .property("countryCode", "string")
    .property("number", "string")
    .property("type", "string")
    .property("reliabilityScore", "decimal")
    .next();

  // Define URL node
  await g.addV("URL").property("link", "string").next();

  // Define School node with attributes
  await g.addV("School").property("name", "string").next();

  // Define Friend node
  await g.addV("Friend").next();

  // Define Website node
  await g.addV("Website").property("link", "string").next();

  // Define Risk node
  await g.addV("Risk").next();

  // Define Skill node with attributes
  await g.addV("Skill").property("name", "string").next();

  await g.addV("Location").next();

  // Define Education node with relationships
  await g.addV("Education").next();

  // Define Employment node with relationships
  await g.addV("Employment").next();

  // Define SocialMedia node with attributes
  await g
    .addV("SocialMedia")
    .property("platform", "string")
    .property("bio", "string")
    .property("profileID", "string")
    .property("isBusinessAccount", "boolean")
    .next();

  // Define Social Post node with attributes
  await g
    .addV("SocialPost")
    .property("risk", "string")
    .property("type", "string")
    .next();

  // Define Lawsuit node with attributes
  await g.addV("Lawsuit").property("type", "string").next();

  // Define Case node
  await g.addV("Case").next();

  // Define Court Record node with attributes
  await g
    .addV("CourtRecord")
    .property("courtCaseNumber", "string")
    .property("sourceCaseNumber", "string")
    .property("natureOfAction", "string")
    .property("caseTitle", "string")
    .property("filingDate", "date")
    .property("status", "string")
    .property("caseType", "string")
    .property("isLawsuit", "boolean")
    .property("courtType", "string")
    .property("dockets", "string")
    .next();

  // Define Court node with attributes
  await g
    .addV("Court")
    .property("courtType", "string")
    .property("system", "string")
    .property("name", "string")
    .property("alternateName", "string")
    .next();

  console.log("Nodes creation complete.");
}

module.exports = createNodes;

Edges.js
const gremlin = require('gremlin');
const createNodes = require('./nodes');

async function createEdges(g) {
  // Import nodes creation function
  await createNodes(g);

      // Define edge relationships
      await g.V().hasLabel('Person').as('person')
      .V().hasLabel('Email').as('email')
      .addE('hasEmail').from('person').to('email')
      .next();
  
    await g.V().hasLabel('Person').as('person')
      .V().hasLabel('PhoneNumber').as('phoneNumber')
      .addE('hasPhoneNumber').from('person').to('phoneNumber')
      .next();
  
    await g.V().hasLabel('Person').as('person')
      .V().hasLabel('Address').as('address')
      .addE('hasAddress').from('person').to('address')
      .next();
  
    await g.V().hasLabel('Person').as('person')
      .V().hasLabel('Company').as('company')
      .addE('hasEmployment').from('person').to('company')
      .next();
  
    await g.V().hasLabel('Person').as('person')
      .V().hasLabel('School').as('school')
      .addE('hasEducation').from('person').to('school')
      .next();
  
    await g.V().hasLabel('Person').as('person')
      .V().hasLabel('Person').as('friend')
      .addE('hasFriend').from('person').to('friend')
      .next();
  
    await g.V().hasLabel('Person').as('person')
      .V().hasLabel('SocialMediaAccount').as('socialMediaAccount')
      .addE('hasSocialMediaAccount').from('person').to('socialMediaAccount')
      .next();
  
    await g.V().hasLabel('Person').as('person')
      .V().hasLabel('Website').as('website')
      .addE('hasWebsite').from('person').to('website')
      .next();
  
    await g.V().hasLabel('Person').as('person')
      .V().hasLabel('Risk').as('risk')
      .addE('hasRisk').from('person').to('risk')
      .next();
  
    await g.V().hasLabel('Person').as('person')
      .V().hasLabel('Skill').as('skill')
      .addE('hasSkill').from('person').to('skill')
      .next();

      await g.V().hasLabel('Company').as('company')
      .V().hasLabel('Address').as('address')
      .addE('hasAddress').from('company').to('address')
      .next();
  
    await g.V().hasLabel('Company').as('company')
      .V().hasLabel('TradingAddress').as('tradingAddress')
      .addE('hasTradingAddress').from('company').to('tradingAddress')
      .next();
  
    await g.V().hasLabel('Company').as('company')
      .V().hasLabel('PreviousAddress').as('previousAddress')
      .addE('hasPreviousAddress').from('company').to('previousAddress')
      .next();
  
    await g.V().hasLabel('Company').as('company')
      .V().hasLabel('CurrentAddress').as('currentAddress')
      .addE('hasCurrentAddress').from('company').to('currentAddress')
      .next();

   
Dev
gefragt vor 4 Monaten98 Aufrufe
Keine Antworten

Du bist nicht angemeldet. Anmelden um eine Antwort zu veröffentlichen.

Eine gute Antwort beantwortet die Frage klar, gibt konstruktives Feedback und fördert die berufliche Weiterentwicklung des Fragenstellers.

Richtlinien für die Beantwortung von Fragen