我想使用orientdb.样本非常简单:
package models;
import java.util.List;
import com.orientechnologies.orient.core.db.object.ODatabaseObjectPool;
import com.orientechnologies.orient.core.db.object.ODatabaseObjectTx;
import com.orientechnologies.orient.core.sql.query.OSQLSynchQuery;
public class User {
public String name;
public static void main(String[] args) {
String uri = "local:c:\\orientdb";
ODatabaseObjectTx db = ODatabaseObjectPool.global().acquire(uri, "admin", "admin");
db.getEntityManager().registerEntityClass(User.class);
User user = new User();
user.name = "aaa";
db.save(user);
List<?> list = db.query(new OSQLSynchQuery<Long>("select count(*) from User"));
System.out.println(list);
db.commit();
db.close(); // ****** throws exception
}
}
Run Code Online (Sandbox Code Playgroud)
但最后一行db.close()会引发异常:
Exception in thread "main" com.orientechnologies.common.concur.lock.OLockException: Can't release a database URL not acquired before. URL: …Run Code Online (Sandbox Code Playgroud) 我想查询具有特定属性的文档.
我尝试了以下方法:
select * from Foo where not bar is null
Run Code Online (Sandbox Code Playgroud)
但即使他们没有这个属性,这也会将文件返回给我.即使它会起作用,如果存在以null作为值的属性,也会产生错误的结果(不知道orientdb是这样工作的).
有没有办法通过sql检查属性的存在?
我正在研究平均堆栈.我想使用orientdb而不是mongodb.我只想知道如何用orientDB替换mongodb.或者如何自定义mongoose以便我可以使用orientDB.提前致谢.
在OrientDB的函数中对非事务图数据库执行命令后,我想获得一个新创建的记录ID.例如,
var gdb = orient.getGraphNoTx();
var v = gdb.command("sql", "create vertex TestV set time = ?, note = ?", [(new Date().getTime()), 'note']);
//how do i refer to v.rid after creation?
return true;
Run Code Online (Sandbox Code Playgroud)
我试着像所有不同的选项,v.rid,v['@rid'],v.field('rid'),等我什至不知道从返回什么类型的对象gdb.command().
到目前为止我所知道的是返回值v的类型是object.v.toString()虽然没有提供任何有价值的见解.
有任何想法吗?
我想这样做,但它不起作用:
select * FROM Users ORDER BY in.size()
Run Code Online (Sandbox Code Playgroud)
我也尝试过:
select * from Users ORDER BY in[label='connection'].size()
select * from Users ORDER BY inE['connection'].size()
Run Code Online (Sandbox Code Playgroud)
它只返回所有V但未排序
我看到我们可以使用以下方法创建orient db:
ODatabaseDocumentTx db2 = new ODatabaseDocumentTx ( "local:C:/temp/db/scratchpad" ).create();
Run Code Online (Sandbox Code Playgroud)
但是如何使用REMOTE类型的密码创建orientDB数据库.这是否会检查数据库是否存在并说出来.或者,如果发现它会覆盖?
我有以下输出
orientdb {db=dict}> select count(distinct(pos)) from Synset;
----+------+-----
# |@CLASS|count
----+------+-----
0 |null |4
----+------+-----
1 item(s) found. Query executed in 2.514 sec(s).
orientdb {db=dict}> select distinct(pos) from Synset;
----+------+--------
# |@CLASS|distinct
----+------+--------
0 |null |n
----+------+--------
1 item(s) found. Query executed in 0.012 sec(s).
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?(不同值的计数与该值的选择不匹配。实际上db中有4个不同值)
更新[WTF]
orientdb {db=dict}> select * from (select distinct(pos) from Synset)
----+------+--------
# |@CLASS|distinct
----+------+--------
0 |null |n
1 |null |v
2 |null |a
3 |null |r
----+------+--------
4 item(s) found. Query executed in 2.722 …Run Code Online (Sandbox Code Playgroud) 在OrientDB中,我使用此用例设置了时间序列.但是,我没有将我的Vertex作为嵌入列表添加到相应的小时,而是选择创建从小时到时间相关的Vertex的边缘.
为了论证,可以说每个小时最多有60个时间,Vertex每个时间由一个时间戳标识.这意味着我可以执行以下查询以获取特定的所需顶点:
SELECT FROM ( SELECT expand( month[5].day[12].hour[0].out() ) FROM Year WHERE year = 2015) WHERE timestamp = 1434146922
Run Code Online (Sandbox Code Playgroud)
我可以从用例中看到,我可以UNION用来一次获得几个指定的时间分支.
SELECT expand( records ) FROM (
SELECT union( month[3].day[20].hour[10].out(), month[3].day[20].hour[11].out() ) AS records
FROM Year WHERE year = 2015
)
Run Code Online (Sandbox Code Playgroud)
如果你只有少量的分支,这可以正常工作,但如果你想获得给定时间跨度的所有记录,它就不能很好地工作.假设你想获得所有记录;
month[3].day[20].hour[11] -> month[3].day[29].hour[23]
Run Code Online (Sandbox Code Playgroud)
我可以遍历时间跨度并创建一个巨大的联合查询,但在某些时候我猜测查询会太长,我的猜测是它不会非常有效.我还可以完全绕过时间分支并根据时间戳直接查询向量.
SELECT FROM Sector WHERE timestamp BETWEEN 1406588622 AND 1406588624
Run Code Online (Sandbox Code Playgroud)
问题是你失去了时间分支所获得的所有效率.
我已经从https://github.com/orientechnologies/PhpOrient安装了OrientDb PHP官方驱动程序.
现在,在PHP页面中,我只希望它使用print_r()函数仅显示'user'集合的属性值,例如user_id,username,email_id,mobile等.
$client = new PhpOrient( 'localhost', 2424);
$client->username = 'root';
Run Code Online (Sandbox Code Playgroud)
显示输出的代码如下::
$client->password = 'root';
$client->connect();
$ClusterMap = $client->dbOpen( 'krshop', 'root', 'root' );
$data = $client->query( 'select from user limit 10' );
echo "<pre>";print_r($data);
Run Code Online (Sandbox Code Playgroud)
我有一个名为superclass的类BaseData和一个派生类MyData.
一开始,我在MyData课堂上添加了一个名为的属性period.
在此之后,通过工作室,我添加了我BaseData的名字相同的属性period.
在这之后.我重新启动了我的服务器,到那时我无法使用此错误访问我的Orient DB服务器:
错误:com.orientechnologies.common.exception.OException:创建共享资源时出错
错误:com.orientechnologies.orient.core.exception.OSchemaException:由于参数冲突,无法添加基类'MyData':period(type = INTEGER)vs period(type = INTEGER)
我试图通过控制台访问,但我有相同的结果,所以我不能删除属性,我不能使用我的数据库.
orientdb ×10
sql ×3
java ×2
codeigniter ×1
database ×1
javascript ×1
mean ×1
mean-stack ×1
mongoose ×1
node.js ×1
nosql ×1
orientdb-2.1 ×1
php ×1
select ×1