Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Cassandra存储嵌套JSON_Json_Node.js_Cassandra - Fatal编程技术网

使用Cassandra存储嵌套JSON

使用Cassandra存储嵌套JSON,json,node.js,cassandra,Json,Node.js,Cassandra,我试图在Cassandra和nodejs绑定中使用复合表存储嵌套的JSON对象 假设我的数据是这样的(朋友和敌人的数据结构实际上比简单的地图更复杂): 根据我对复合键(此处:)的理解,我希望将数据存储如下: 001 | luke | skywalker | friend:002:han:solo | friend:003:obiwan:kenobi | ... | foe:006:boba:feet CREATE TABLE heroes ( id int, n

我试图在Cassandra和nodejs绑定中使用复合表存储嵌套的JSON对象

假设我的数据是这样的(朋友和敌人的数据结构实际上比简单的地图更复杂):

根据我对复合键(此处:)的理解,我希望将数据存储如下:

 001  |  luke  |  skywalker |  friend:002:han:solo | friend:003:obiwan:kenobi  |  ... | foe:006:boba:feet
CREATE TABLE heroes (
    id int,
    name text,
    lastname text,
    friend_id int,
    friend_name text,
    friend_lastname text,
    foe_id int,
    foe_name text,
    foe_lastname text,
    PRIMARY KEY ((id, name, lastname), friend_id, foe_id)
);
{ rows:
   [ { __columns: [Object],
       id: 001,
       name: 'luke',
       lastname: 'skywalker',
       friend_id: 002,
       friend_name: 'han',
       friend_lastname: 'solo',
       foe_id: null,
       foe_name: null,
       foe_lastname: null } ],
  meta:
   // some data
}
我创建的表格如下所示:

 001  |  luke  |  skywalker |  friend:002:han:solo | friend:003:obiwan:kenobi  |  ... | foe:006:boba:feet
CREATE TABLE heroes (
    id int,
    name text,
    lastname text,
    friend_id int,
    friend_name text,
    friend_lastname text,
    foe_id int,
    foe_name text,
    foe_lastname text,
    PRIMARY KEY ((id, name, lastname), friend_id, foe_id)
);
{ rows:
   [ { __columns: [Object],
       id: 001,
       name: 'luke',
       lastname: 'skywalker',
       friend_id: 002,
       friend_name: 'han',
       friend_lastname: 'solo',
       foe_id: null,
       foe_name: null,
       foe_lastname: null } ],
  meta:
   // some data
}
然后为每个朋友或敌人跑步:

client.execute(
   'INSERT INTO heros (id, name, lastname, friend_id, friend_name, friend_lastname) VALUES (?, ?, ?, ?, ?)',
   [001, 'luke', skywalker', 002, 'han', 'solo'],
   function(err) {
     //some code
   }
)
现在,当运行查询时,
'SELECT*FROM heromes WHERE id=001'
我希望只得到一行,所有的朋友或敌人都添加为列。 相反,我在那里和朋友和敌人一样吵架。除此之外,朋友的一行如下所示:

 001  |  luke  |  skywalker |  friend:002:han:solo | friend:003:obiwan:kenobi  |  ... | foe:006:boba:feet
CREATE TABLE heroes (
    id int,
    name text,
    lastname text,
    friend_id int,
    friend_name text,
    friend_lastname text,
    foe_id int,
    foe_name text,
    foe_lastname text,
    PRIMARY KEY ((id, name, lastname), friend_id, foe_id)
);
{ rows:
   [ { __columns: [Object],
       id: 001,
       name: 'luke',
       lastname: 'skywalker',
       friend_id: 002,
       friend_name: 'han',
       friend_lastname: 'solo',
       foe_id: null,
       foe_name: null,
       foe_lastname: null } ],
  meta:
   // some data
}
我本以为它根本就不会有敌人


是我做错了什么,还是卡桑德拉处理复合物品的方式?

你得到的结果是意料之中的,因为你在主键中包含了朋友和敌人。英雄与朋友和敌人有一对多的联系。在您提到的我的博客文章中,我只使用了primary实体属性作为主键。所有子实体属性都映射为动态列。

列和行在CQL和存储引擎中的表达方式有所不同。您应该关注CQL主键的组成:分区键和集群键。有关更多信息,请参阅。