Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Activity
    Emanuele Della Valle
    @emanueledellavalle
    per togliere l'indice
    Emanuele Della Valle
    @emanueledellavalle
    db.orders.dropIndex( { "utente.name": 1 } )
    a questo punto il piano è di nuovo un COLSCAN

    aggregati

    quanti ordini ci sono per ciascun utente
    Emanuele Della Valle
    @emanueledellavalle
    db.orders.aggregate( [ {$match: { }}, {$group: { _id: "$utente.id", count: {$sum: 1} }} ])
    è possibile specificare una condizione di match
    db.orders.aggregate( [
    {$match: {
    products : { $elemMatch: {qty: {$gt: 2} } }
    }},
    {$group: { _id: "$utente.id", count: {$sum: 1} }}
    ])

    links

    Emanuele Della Valle
    @emanueledellavalle
    Emanuele Della Valle
    @emanueledellavalle

    Neo4j

    docker pull neo4j
    docker run -p 7474:7474 -p 7687:7687 -d neo4j
    ttp://localhost:7474
    psw: neo4j
    poi cambiarla
    se non avete docker https://neo4j.com/download/
    Emanuele Della Valle
    @emanueledellavalle
    come creare un nodo
    CREATE (<variabile>:<tipo> {<field>: <valore>})
    se volete crearne più di uno collegati
    CREATE (top:Category {name: "top"})
    CREATE (sub1:Category {name: "sub1"})
    CREATE (sub2:Category {name: "sub2"})
    CREATE (sub11:Category {name: "sub1.1"})
    CREATE (sub12:Category {name: "sub1.2"})
    CREATE (sub121:Category {name: "sub1.2.1"})
    CREATE (top)-[:narrower]->(sub1),
    (top)-[:narrower]->(sub2),
    (sub1)-[:narrower]->(sub11),
    (sub1)-[:narrower]->(sub12),
    (sub12)-[:narrower]->(sub121)
    Emanuele Della Valle
    @emanueledellavalle
    sitassi per creare relazione
    CREATE (<variabile>)-[:<proriterà>]->(<variabile>)
    Emanuele Della Valle
    @emanueledellavalle

    querying

    trova tutti i nodi
    MATCH (n) RETURN n
    trova tutte le relazioni
    MATCH p=()-[]->() RETURN p
    tutti i nodi legati da narrower
    MATCH p=()-[]->() RETURN p
    Emanuele Della Valle
    @emanueledellavalle
    trova tutti i nodi che partono da top seguendo narrower
    MATCH p=(a)-[:narrower]->() WHERE a.name="top" RETURN p
    trova tutti i nodi che si raggiungono da top seguendo narrower
    MATCH p=(a)-[:narrower*]->() WHERE a.name="top" RETURN p
    trova tutti i nodi che si raggiungono da top in minimo 2 e massimo 3 passi seguendo narrower
    MATCH p=(a)-[:narrower*2..3]->() WHERE a.name="top" RETURN p
    Emanuele Della Valle
    @emanueledellavalle

    bridge verso altri dati

    LOAD CSV FROM
    'http://emanueledellavalle.org/data/neo4j/retail/users.csv' AS line
    CREATE (:User {uid: toInteger(line[0]), name: line[1]})
    Emanuele Della Valle
    @emanueledellavalle
    LOAD CSV FROM
    'http://emanueledellavalle.org/data/neo4j/retail/products.csv' AS line
    CREATE (:Product {uid: line[0], brand: line[2], name: line[1]})
    fin qua tutto facile perchè abbiamo creato solo oggetti nuovi
    LOAD CSV FROM
    'http://emanueledellavalle.org/data/neo4j/retail/orders.csv' AS line
    MATCH (user:User {uid: toInteger(line[1])})
    MATCH (product:Product {uid: line[2]})
    MERGE (order:Order {id: toInteger(line[0])})
    Emanuele Della Valle
    @emanueledellavalle
    ora colleghiamo i prodotti alle categorie
    MATCH (category:Category {name: "sub1.2.1"})
    MATCH (product:Product {uid: "a"})
    MERGE (product)-[:topic]->(category)
    e ora un po' di magia
    MATCH (order)-[:contains]->(product),
    (product)-[:topic]->(category),
    (supercategory)-[:narrower*]->(category)
    WHERE supercategory.name="sub1"
    RETURN order, product, category
    Emanuele Della Valle
    @emanueledellavalle
    troviamo red apple di categoria 1.2.1
    Emanuele Della Valle
    @emanueledellavalle
    next: query che interrogano lo schema