1

orientjs(以前はoriento)クエリビルダーで頂点を挿入しようとしています。私のクラスには、別のクラスを指すリンク タイプ プロパティがあります。

生のクエリ文字列で動作させることができることはわかっていますが、クエリビルダーを使用したいと思っています。

これが私がこれまでに試したことです:

db.insert()
.into('VertexClassName')
.set({"prop":"value", "linkProperty":"33:1289287"})

db.insert()
.into('VertexClassName')
.set({"prop":"value", "linkProperty":"#33:1289287"})

次のエラーが表示されます。

Error on saving record in cluster #13

プロパティを正しい方法で設定していますか? エラーは他の何かに関連している可能性がありますか? スタジオで生のクエリ文字列を使用して、クラスター #13 で挿入クエリを正常に実行しました...

4

3 に答える 3

0

スキーマに適切なタイプの「リンク」を持つ適切なフィールドを追加しない限り、それは不可能だと思います。(私はめったにしません)。

適切な「リンク」タイプを挿入する代わりに、反対のことを行うことができます。ストアは文字列として保存され、クエリ関数を活用して正しく使用できます。

db.insert().into('table').set({prop: '#15:14'}).one();

そして、文字列として変換されます (これは少し悲しいことです) が、それをクエリで使用できます。

SELECT eval(prop) FROM table; 

そして、それは直接使用して expand() のような関数を呼び出すことができる Node RecordID に「評価」されます。

例えば:

SELECT name FROM (SELECT expand(eval(prop)) FROM table); 

insert() に格納されているノードを評価し、ノードを取得して展開し、その name プロパティを収集します。

于 2017-01-08T06:42:10.657 に答える
0

公式ドキュメントによると、問題はステートメントの最後にあるようです

db.insert().into('VertexClassName')
    .set({"prop":"value", "linkProperty":"33:1289287"}).one()
    .then(function (data) {
       // callback
});

パイプラインに one() を追加して、コードが機能するかどうかを確認します

EDITED : orientjs でこのメソッドを見つけました。

db.create('VERTEX', 'V')
.set({
  key: 'value',
  foo: 'bar'
})
.one()
.then(function (vertex) {
  console.log('created vertex', vertex);
});

Tinkerpop API を使用する場合、createVertex はグラフ用で、挿入はドキュメント用であるため、insert の代わりに createVertex を使用することをお勧めします...代わりに create() メソッドを試していただけますか?

于 2015-07-28T12:56:54.167 に答える