mongodb - 将 mongodb 与 neo4j 集成,是否有任何 API 可以链接它们?

标签 mongodb neo4j graph-databases cypher spring-data-neo4j

我正在研究推荐引擎。收集用户数据(他们的友谊、位置、喜好、教育等)并已存储在 mongodb 中。我需要向这些用户推荐相关产品。出于显而易见的原因(便于节点之间的遍历、路径信息等),我计划将 neo4j 用于推荐引擎。问题是我必须首先将 mongodb 数据转换为 neo4j 节点/关系,处理数据并将结果发送回 mongodb 数据库。主要问题是我们最终会维护两个数据库,这是开发团队不会高兴的。我已经研究过类似的帖子 mongodb-neo4jspring data但不确定如何解决这个问题。 这些是我的问题
1- 仅仅为了推荐引擎而添加另一个数据库是否值得(我们正在处理一个大型网络),尽管 neo4j 非常适合此类任务。
2-我正在使用 cypher 进行查询,对 java、rest API 和 spring 数据了解不多。我应该使用哪种 API 进行 mongodb-neo4j 通信?我目前的解决方案是使用 R 并将其用作连接 mongodb 和 neo4j 的平台。
3- 其他图数据库怎么样,有没有适合与 Mongo 集成的图数据库?

最佳答案

我找到了两种集成 mongodb 和 Neo4j 的方法。第一个是由ryan1234建议的将 Gremlin 与 Gmongo 一起使用。根据这个优秀的blog,步骤如下
1- 下载 GmongoJava mongo driver
2-复制neo4j/lib目录下的两个jar文件
3-这是一个例子。假设我们在 mongodb 中有这个集合(称为 follows)

{ "_id" : ObjectId("4ff74c4ae4b01be7d54cb2d3"), "followed" : "1", "followedBy" : "3", "createdAt" : ISODate("2013-01-01T20:36:26.804Z") }
{ "_id" : ObjectId("4ff74c58e4b01be7d54cb2d4"), "followed" : "2", "followedBy" : "3", "createdAt" : ISODate("2013-01-15T20:36:40.211Z") }
{ "_id" : ObjectId("4ff74d13e4b01be7d54cb2dd"), "followed" : "1", "followedBy" : "2", "createdAt" : ISODate("2013-01-07T20:39:47.283Z") }

从 Neo4j 的 Gremlin shell 运行以下命令。

import com.gmongo.GMongo
mongo = new GMongo() 
db = mongo.getDB("local")
db.follows.findOne().followed
x=[] as Set; db.follows.find().each{x.add(it.followed); x.add(it.followedBy)}
x.each{g.addVertex(it)}
db.follows.find().each{g.addEdge(g.v(it.followedBy),g.v(it.followed),'follows',[followsTime:it.createdAt.getTime()])} 

这就是我们在 neo4j 中创建的等价图

关于mongodb - 将 mongodb 与 neo4j 集成,是否有任何 API 可以链接它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15477934/

相关文章:

node.js - 与 Mongoose 相比,MongoDB 原生 Node.js 驱动程序的性能很糟糕,我做错了什么?

javascript - 从 id 获取与 NodeJS 中的 mongoose 匹配的对象子数组的父对象

mongodb - 如何使用 "join"从 MongoDB 导出数据?

regex - Neo4j 正则表达式字符串匹配未返回预期结果

graph-databases - 使用 OrientDB 递归遍历有向边

nosql - 寻找具有 .NET 或 C++ 绑定(bind)的成熟、可扩展的 GraphDB

mongodb - 无法从MongoDB解码嵌入式文档(嵌套)

ruby-on-rails - Rails Neo4j 结构错误中没有成员 'ssl' 是什么意思

java - 如何使用 Neo4j 和 spring 数据返回多个对象?

neo4j - 如何在 Neo4j 2.0.0M5 中通过标签创建和检索节点