2016-08-24 7 views
3

私はcassandraに非常に単純なテーブルを持っています。
名:テスト
BigIntをノードjsからcassandraに挿入

  • ID(BIGINT、主キー)
  • 名(テキスト)

私はカサンドラ・ドライバを使用して(この使用nodejsに値に挿入しようとしています)

client.execute("insert into test (id, name) values (?, ?)", [123, "dskddjls"], function (err, response) { 
      if (err) { 
       console.log("An error occured, ", err) 
       //... 
      } 
      else { 
       console.log("Added to table, ", response) 
       //... 
      } 
     }) 

挿入が正常に完了したが、私は私のカサンドラデータベースを確認したときに、私は大きなint型のコのためのごみ値を持っているかのように、それが表示されます列。

enter image description here

なぜこれが起こっているため、任意の説明?

+1

明示的に型を指定しようとすることができます: 'client.executeを(」 (123、 "dskddjls"、ヒント:["bigint"、null]}、function(err、data){....}) 'テスト(ID、名前)の値(?、?) –

+0

@VsevolodGolovizninええ、これは動作します。では、型を明示的に指定する必要がありますか? – Sachin

答えて

3

あなたはexecute関数の3番目の引数として明示的に型を指定する必要があります。

client.execute("insert into test (id, name) values (?, ?)", [123, "dskddjls"], {hints: ["bigint", null]}, function (err, response) { 
    ... 
}) 

理由は、いくつかのフィールドのカサンドラドライバが(BIGINTまたはタイムスタンプなど)の種類を推測することができないということですので、あなたそれをヒントする必要があります。文字列または通常の数字の場合、ヒントなしで動作します。

+0

'bigint'の期待されるJavaScriptの型は' Long'です:https://github.com/datastax/nodejs-driver/tree/master/doc/features/datatypes – jorgebg

1

CQL datatypes to JavaScript types documentationには、bigintの予想されるJavaScriptの種類はLongであることがわかります。 JavaScript Numberのタイプはdouble-precision 64-bit binary format IEEE 754 valueで、ドライバによってCassandra int,floatおよびdouble(デフォルト)を表すために使用されます。 JavaScriptのタイプとの間の正確なマッピングのために、また

const query = "insert into test (id, name) values (?, ?)"; 
client.execute(query, [ Long.fromNumber(123), "my name" ], callback); 

:あなたは数としてアプリケーションを持っている値を挿入したい場合は

あなたの場合

、あなたはLong.fromNumber()メソッドを使用する必要がありますカサンドラタイプ(他の特典と一緒に)prepare your queriesする必要があります。あなたがprepareフラグを設定した場合、あなたのケースでは、ドライバーは期待値がLongであることを識別し、Numberからの変換を行います。

client.execute(query, [ 123, "my name" ], { prepare: true }, callback); 
+0

True!それを取り巻く別の方法:)準備中の文が必ずしも機能しない –

関連する問題