Tag: neo4j

Neo4j seraph-model:创build一个与其他节点相关的节点

嗨,我已经开始工作neo4j和seraph和seraph-model包。 一个问题poped:我似乎无法find一种方法来创build一个节点连接到其他节点在一个查询的例子: Create (n:User)-[r:Has]->(p:UserImage)我知道我可以做到这一点使用本机seraph.query但后来我失去了一些模型function..(如时间戳) 还有其他的方法吗? 这个查询分三个步骤要花费多less钱? (创build用户,创build图像,然后链接)

在NEO4J中重新调整复杂的树状结构,没有重复

我有一个getPhotosInBucket方法,它返回一个给定的桶中存在[:IN]关系的所有照片,每个照片都有自己的关系集合,每个getPhotosInBucket都包含对应于不同版本图像的属性。 小,中等,缩略图等。为了使事情更加复杂,每张照片也有一个创作者,每个创作者都有一个缩略图,像一张照片一样有多个与之相关的Meta节点。 以下是将要返回的内容的简化版本。 在这个例子中,只有一个用户创build了这个桶并创build了每张照片,但是在现实世界中,用户James可能会有一个包含100个不同图像的桶,每个图像都有自己的创build者,缩略图和创build者缩略图。 用来返回这个数据的查询有点冗长,只是为了展示我的结构,并生成一个可视化的graphics: MATCH (album:Asset:Album:Bucket {name: 'Bucketjamesprivate'}) MATCH (album)<-[:CREATED]-(creator) OPTIONAL MATCH (album)<-[:THUMBNAIL]-(albumThumb)<-[:META]-(albumThumbMeta) OPTIONAL MATCH (creator)<-[:THUMBNAIL]-(creatorThumb) OPTIONAL MATCH (creatorThumb)<-[:META]-(creatorThumbMeta) OPTIONAL MATCH (album)<-[:IN]-(photos)<-[:META]-(meta) OPTIONAL MATCH (photos)<-[:CREATED]-(photoOwner)<-[:THUMBNAIL]-(photoThumbnail)<-[:META]-(photoThumbnailMeta) RETURN DISTINCT album, albumThumb, albumThumbMeta, creator, creatorThumb, photos, meta, photoOwner, photoThumbnailMeta 这最终返回以下内容: 正如你所看到的,James创造了1个桶,1个桶缩略图和3个元节点,2个在桶中的每个都有3个元节点,最后他有一个缩略图和3个元节点。 实际返回的行数是54,只有当我把一堆照片放回去时,才能成倍增长,所以也许有更高效的方法来做这件事。 我已经尝试使用收集方法,但它引入了一些奇怪的重复,我敢肯定,但我不明白为什么足够好。 我希望我的方法最终返回的对象将是这样的: { album: { name: 'etc', foo: 'bar', bar: 'foo' }, albumThumb: [ { […]

与电子Neo4j官方的JavaScript驱动程序

我正在尝试使用电子和Neo4j官方npm打包的驱动程序为Neo4j创build一个示例演示应用程序,而且我的代码真的很基本,但是当我尝试打开一个会话时出现错误。 这段代码是用脚本标记写在index.html中的: require('./renderer.js') var neo4j = require('neo4j-driver').v1; var driver = neo4j.driver("bolt://localhost", neo4j.auth.basic("neo4j", "neo4j")); var session = driver.session(); 在最后一次调用时,这是我在控制台中得到的错误消息: Uncaught Error: Don't know how to send buffer: NodeBuffer( position=0 )60 60 b0 17 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 有没有人遇到这样的问题?

在哪里把neo4j创build约束语句在nodejs(express)?

我想了解如何使用neo4j作为数据库来组织我的节点api代码。 我正在使用neo4j-javascript-driver 。 我正在尝试在一些用户字段上创build约束。 但是我不确定把代码放在哪里。 因为这些创build约束语句应该只运行一次。 我想在neo4j UI上手动运行语句,在那里你可以运行语句,但是如果我去做生产,我可能不想再次运行语句。 我的代码: session .run("CREATE CONSTRAINT ON (user:USER) ASSERT user.email IS UNIQUE") .then((result) => { console.log("neo4j constraints successful"); neoSession.close(); }) .catch((error) => { console.log("constraint.js error : ",error); });

如何在Nodejs中的文件之间导出会话variables?

我目前在我的server.js文件中: const neo4j_conn = 'bolt://' + config.neo4j.host; const driver = neo4j.driver(neo4j_conn, neo4j.auth.basic(config.neo4j.username, config.neo4j.passphrase)); const session = driver.session(); app.set('neo4jsession', session); require('./app/routes')(app); 并在我的路线文件中有: const session = app.get('neo4jsession'); 考虑到每个请求只需要一个会话,这是我连接数据库并获得会话的正确方法吗? 你能提出一个更好的devise模式/编码方法/为此目的?

如何将variables作为parameter passing给密码查询(neo4j)

我想传递一个variables(值从请求体)作为参数的密码查询,但我不知道是否(以及如何)这是可能的。 我已经尝试了几件事情,一个“正常”的密码查询与硬编码string参数是完美的工作,但是当我想通过variables作为参数,我会得到一个错误结构(127,[[对象对象]]) 。 我在Neo4j 3.1上。 结合构build密码查询的node.js-server。 这是一个片段.. var user_firstname = req.body.firstname; var user_lastname = req.body.lastname; var user_city = req.body.city; session .run("CREATE (n:Person {firstname: {firstname}, lastname: {lastname}, city: {city}})", { firstname: user_firstname, lastname: user_lastname, city: user_city }) 在此先感谢您的帮助,欢呼!

如果存在结束节点,则创build节点和关系(否则仅创build第一个节点)

我有一个应用程序通过消息队列发送数据库写入命令给工作人员(量很大),所以不能保证它们将被接收的顺序。 我有两个节点,例如,“帐户”和“媒体”。 在这个假设的应用程序中,用户可以匿名上传媒体,这会自动为他们创build一个帐户,然后他们可以随后将其关联。 两个信息,一个用于帐户,另一个用于媒体(几乎可以肯定地由不同的工作人员)。 他们两个都不知道对方是否写下来。 我需要写一个将在每个工人上运行的查询,其中: 创build新的帐户/媒体 如果其他节点存在, POSTED_BY两者之间创buildPOSTED_BY关系 如果其他节点不存在,则只创build当前节点 返回新创build的节点 因此,无论接收到每条消息的顺序如何,第一个查询都将创build节点A,而第二个查询将创build节点B +关系。 如果我在同一个查询中创build它们,那将很简单: CREATE (m:Media { url: 'xyz.jpg' })-[:POSTED_BY]->(u:Account { username: 'johndoe' }) RETURN m,u 我已经看了CREATE UNIQUE和MERGE ,但是如果它不存在,它们似乎都会创build节点,而不是只是无所事事。

neo4j javascript / nodejs驱动程序不能调用onCompleted或onError

我有一个基本的NodeJS / Neo4j设置似乎工作正常,但是我已经注意到, driver.onCompleted和driver.onError没有被调用,因为我期望,基于这里在用法示例部分的文档: https:// github.com/neo4j/neo4j-javascript-driver 我的设置看起来像这样: 'use strict'; const neo4j = require('neo4j-driver').v1; const authConfig = require('../keys/authConfig'); //Set up connection driver let driver = neo4j.driver('bolt://localhost', neo4j.auth.basic(authConfig.neo4jAuth.username, authConfig.neo4jAuth.password), { trust: "TRUST_ON_FIRST_USE", encrypted:"ENCRYPTION_NON_LOCAL" }); driver.onCompleted = function(){ console.log('DB Driver Connected'); }; driver.onError = function($err){ console.log('DB Driver Error: ', $err); }; 现在介意你一切运行正常,我可以打电话给数据库等,但我会期望这些callback被调用。 我认为我错过了一些微不足道的东西。 有什么想法吗? 非常感谢!

parsingstream式JSON

我有一个工具,我正在parsingNeo4j响应并发射对象。 https://github.com/brian-gates/neo4j-stream-deserializer 我的问题: 我如何处理错误? 有没有更好的方法来处理标题比两个parsing器? 似乎是不必要的开销。 可能的错误响应如下所示: { message: 'Error explanation, … other useful info … } 完整的例子: https://gist.github.com/brian-gates/4a16e0aee13d6e549d52 成功的回应如下所示: { columns: [], results: [] } https://github.com/brian-gates/neo4j-stream-deserializer/blob/master/test/mock/neo4j_response.json

使用node-neo4j读取节点时出现问题&使用neo4j-shelldebugging技巧

我是Neo4J的新手。 到目前为止,我成功安装并启动了Neo4J服务器,并通过运行命令neo4j status检查它。 通过使用node-neo4j驱动程序向数据库添加和更新节点。 在我的nodejs服务器中,我创build了一个新的数据库: db = new neo4j("http://127.0.0.1:7474"); 接下来,我插入一个新节点: db.insertNode( {"name": "Darth Vader","sex": "male"}, (err, node) -> if err then throw err console.log "Insert node" console.log node ) 插入新节点时,我不会遇到任何错误。 但是,当我尝试读取此节点 db.readNode( {"name": "Darth Vader"}, (err, node) -> if err then throw err; # 48th line of server.js console.log "Read node" console.log node ) ReadNode函数在第48行抛出以下exception(您可以在上面给出的代码片段中find第48行)。 […]