开发者社区> 李欣529> 正文

表格存储 Node.js SDK 开发入门

简介: 本文将结合电商订单场景为例,介绍表格存储 Tablestore Node.js SDK 的基本使用方法。
+关注继续查看

准备工作

在您开始Tablestore SDK开发前,需确保已开通表格存储服务并且已创建表格存储实例。

您需要提前获取到以下几个参数


开发简介

开发示例中将以订单场景为例,使用Tablestore SDK实现如下几个功能。

  • 订单表创建。
  • 订单插入。
  • 订单号查询。
  • 订单搜索。


字段名

字段类型

字段描述

order_id

String

主键

订单号

customer_name

String

属性列

消费者姓名

product_name

String

属性列

产品名

product_type

String

属性列

产品类型

order_time

String

属性列

下单时间

pay_time

String

属性列

支付时间

订单表

开发步骤

初始化连接

Tablestore支持Http/Https协议访问服务端,使用Node.js SDK发起请求前,您需要初始化一个OTSClinet实例,初始化需要获取到服务地址(endpoint)、实例名(instanceName)、密钥(accessKeyId、accessSecret)等信息。代码如下

var client = new TableStore.Client({

 accessKeyId: '',

 accessKeySecret: '',

 endpoint: '"https://order-instance.cn-beijing.ots.aliyuncs.com"',

 instancename: 'order-instance',

  maxRetries:20,//默认20次重试,可以省略此参数。

});

创建数据表

示例代码中创建了一张订单数据表order。

var client = require('./client');
var params = {
  tableMeta: {
    tableName: 'order',
    primaryKey: [
      {
        name: 'order_id',
        type: 'STRING'
      }
    ]
  },
  reservedThroughput: {
    capacityUnit: {
      read: 0,
      write: 0
    }
  },
  tableOptions: {
    timeToLive: -1, //数据的过期时间,单位为秒,-1代表永不过期。如果设置过期时间为一年,即为365*24*3600。
    maxVersions: 1  //保存的最大版本数,设置为1代表每列上最多保存一个版本(保存最新的版本)。
  }
};
client.createTable(params, function (err, data) {
  if (err) {
    console.log('error:', err);
    return;
  }
  console.log('success:', data);
});

            

写入数据

示例代码中写入了一条订单数据,订单号order_id为“o1”。样例中模拟了一万条订单数据,这里不作展示。

var TableStore = require('../index.js');
var client = require('./client');
var params = {
  tableName: "order",
  condition: new TableStore.Condition(TableStore.RowExistenceExpectation.IGNORE, null),
  primaryKey: [{ 'order_id': 'o1' }],
  attributeColumns: [
    { 'customer_name': '消十一' },
    { 'product_name': 'iphone 6'},
    { 'product_type': '手机' },
    { 'order_time': '2021-10-25 09:20:01' },
    { 'pay_time': '2017-10-25 10:00:01') }
  ],
  returnContent: { returnType: TableStore.ReturnType.Primarykey }
};
client.putRow(params, function (err, data) {
  if (err) {
    console.log('error:', err);
    return;
  }
  console.log('success:', data);
});

                    

查询数据

示例代码中查询订单号order_id为“o1”的记录

var TableStore = require('../index.js');
var client = require('./client');
var params = {
  tableName: "order",
  primaryKey: [{ 'order_id': 'o1' }],
  maxVersions: 1 //最多可读取的版本数,设置为1即代表最多可读取1个版本。
};
client.getRow(params, function (err, data) {
  if (err) {
    console.log('error:', err);
    return;
  }
  console.log('success:', data);
});

                    

创建多元索引

示例代码中创建了一个多元索引order_index。分别设置customer_name字符串类型、order_time字符串类型、pay_time字符串类型、product_name分词类型、product_type字符串类型。关于索引字段类型的介绍请参考多元索引概述

var client = require('./client');
var TableStore = require('../../index.js');
client.createSearchIndex({
    tableName: 'order', //设置数据表名称。
    indexName: 'order_index', //设置多元索引名称。
    schema: {
        fieldSchemas: [
            {
                fieldName: "customer_name",
                fieldType: TableStore.FieldType.KEYWORD, //设置字段名和字段类型。
                index: true, //设置开启索引。
                enableSortAndAgg: true, //设置开启排序与统计聚合功能。
                store: false,
                isAnArray: false
            },
            {
                fieldName: "order_time",
                fieldType: TableStore.FieldType.KEYWORD,
                index: true,
                enableSortAndAgg: true,
                store: true,
                isAnArray: false
            },
            {
                fieldName: "pay_time",
                fieldType: TableStore.FieldType.KEYWORD,
                index: true,
                enableSortAndAgg: true,
                store: true,
                isAnArray: false
            },
            {
                fieldName: "product_name",
                fieldType: TableStore.FieldType.TEXT,
                index: true,
                enableSortAndAgg: false,
                store: true,
                isAnArray: false,
                analyzer: "single_word"
            },
            {
                fieldName: "pay_time",
                fieldType: TableStore.FieldType.KEYWORD,
                index: true,
                enableSortAndAgg: true,
                store: true,
                isAnArray: false
            }
        ]
    }
}, function (err, data) {
    if (err) {
        console.log('error:', err);
        return;
    }
    console.log('success:', data);
});

搜索数据

示例代码中查询产品类型为“手机”的订单,并统计了符合条件的行数。

var client = require('./client');
var TableStore = require('../../index.js');
client.search({
    tableName: 'order',
    indexName: 'order_index',
    searchQuery: {
        offset: 0,
        limit: 10, 
        query: { 
            queryType: TableStore.QueryType.TERM_QUERY,
            query: {
                fieldName: "product_type",
                term: "手机"
            }
        },
        getTotalCount: true //结果中的TotalCount可以表示表中数据的总行数,默认为false,表示不返回。
    },
    columnToGet: { //返回列设置RETURN_SPECIFIED(自定义)、RETURN_ALL(所有列)和RETURN_NONE(不返回)。
        returnType: TableStore.ColumnReturnType.RETURN_ALL
    }
}, function (err, data) {
    if (err) {
        console.log('error:', err);
        return;
    }
    console.log('success:', JSON.stringify(data, null, 2));
});

示例代码中搜索产品名包含“iphone”的订单,并统计了符合条件的行数。

var client = require('./client');
var TableStore = require('../../index.js');
client.search({
    tableName: 'order',
    indexName: 'order_index',
    searchQuery: {
        offset: 0,
        limit: 10, 
        query: { //设置查询类型为MatchQuery。
            queryType: TableStore.QueryType.MATCH_QUERY,
            query: {
                fieldName: "product_name", //设置要匹配的列。
                text: "iphone" //设置要匹配的值。
            }
        },
        getTotalCount: true //结果中的TotalCount可以表示表中数据的总行数,默认为false,表示不返回。
    },
    columnToGet: { //返回列设置RETURN_SPECIFIED(自定义)、RETURN_ALL(所有列)和RETURN_NONE(不返回)。
        returnType: TableStore.ColumnReturnType.RETURN_ALL
    }
}, function (err, data) {
    if (err) {
        console.log('error:', err);
        return;
    }
    console.log('success:', JSON.stringify(data, null, 2));
});

示例代码中查询了消费者姓名为“消十一”并且下单时间在“2021-10-24 00:00:00”之间的订单。并统计了行数。

var client = require('../client');
var TableStore = require('../../index.js');
client.search({
    tableName: "order",
    indexName: "order_index",
    searchQuery: {
        offset: 0, 
        limit: 10, 
        getTotalCount: false, //结果中的TotalCount可以表示表中数据的总行数,默认为false,表示不返回。
        query: { //构造boolQuery4,设置查询条件为至少满足boolQuery1和boolQuery3中的一个条件。
            queryType: TableStore.QueryType.BOOL_QUERY,
            query: {
                mustQueries: [             
                    {
                        queryType:TableStore.QueryType.TERM_QUERY,
                        query: {
                            fieldName : "customer_name",
                            term: "消十一"
                        }
                    },
                    { 
        queryType: TableStore.QueryType.RANGE_QUERY,
                        query: {
                            fieldName: "order_time",
                            rangeTo: '2021-10-24 00:00:00',
                            includeUpper: false
                        }
                    }
                ]
            }
        },
    },
    columnToGet: { //返回列设置RETURN_SPECIFIED(自定义)、RETURN_ALL(所有列)和RETURN_NONE(不返回)。
        returnType: TableStore.ColumnReturnType.RETURN_ALL
    }
}, function (err, data) {
    if (err) {
        console.log('error:', err);
        return;
    }
    console.log('success:', JSON.stringify(data, null, 2));
});

删除多元索引

示例代码中展示了删除订单表order中的order_index多元索引。

var client = require('./client');
client.deleteSearchIndex({
    tableName: 'order', //设置数据表名称。
    indexName: 'order_index'  //设置多元索引名称。
}, function (err, data) {
    if (err) {
        console.log('error:', err);
        return;
    }
    console.log('success:', data);
});

删除数据表

示例代码中展示了删除订单表order。删除表之前需确保先删除表中的多元索引。

var client = require('./client');
var params = {
    tableName: 'order'
};
client.deleteTable(params, function (err, data) {
    if (err) {
        console.log('error:', err);
        return;
    }
    console.log('success:', data);
});

            

更多关于Tablestore Node.js SDK的介绍请参考Tablestore Node.js SDK

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Node.js入门之process模块、child_process模块、cluster模块
本文主要介绍node中跟进程相关的三个模块。process是node的全局模块,作用比较直观。可以通过它来获得node进程相关的信息,child_process主要用来创建子进程,可以有效解决node单线程效率不高的问题。cluster是node的集群模块,提供了开箱即用的进程创建功能。
67 0
Node.js入门之http模块和dns模块
在nodejs中,http可以说是最核心的模块,借助http模块,可以几行代码就搞定一个超迷你的web server。学好http模块对于后面的web框架express、koa的学习也很有帮助。
57 0
Node.js入门之url模块和querystring模块
url模块和querystring模块是非常重要的两个URL处理模块。在做node服务端的开发时会经常用到。
56 0
Node.js入门之fs模块
今天我们再来学习下`Node.js`中另外一个比较重要的模块,`fs`模块。`fs`模块主要是对系统中文件和文件夹相关的操作。
33 0
Node.js入门之path模块
前面我们介绍了什么是Node.js,今天我们主要再来说说path模块。path模块主要是对系统中路径的一些操作。比如常用的获取文件路径、文件名、文件扩展名等。
25 0
Node.js入门之什么是Node.js
作为前端开发者,我相信对Node.js肯定不陌生,都知道是一个javascript的运行环境。但是要讲出Node.js的优缺点,以及在什么场景下使用Node.js好可能就不是很清楚了。今天笔者以自己的工作经验,简单分享下自己对Node.js的看法,希望能帮助到小伙伴们。
26 0
开心档-软件开发入门之Node.js GET/POST请求
在很多场景中,我们的服务器都需要跟用户的浏览器打交道,如表单提交。 表单提交到服务器一般都使用 GET/POST 请求。 本章节我们将为大家介绍 Node.js GET/POST请求。
29 0
node.js 学习入门(08 - MySQL 数据库)
node.js 学习入门(08 - MySQL 数据库)
42 0
node.js 学习入门(07 - express 模块创建基本 web 服务器)(下)
node.js 学习入门(07 - express 模块创建基本 web 服务器)
74 0
node.js 学习入门(07 - express 模块创建基本 web 服务器)(上)
node.js 学习入门(07 - express 模块创建基本 web 服务器)
53 0
+关注
李欣529
阿里云数据库表格存储 Tablestore 解决方案架构师
文章
问答
视频
文章排行榜
最热
最新
相关电子书
更多
沪江基于Node.js大规模应用实践
立即下载
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
相关实验场景
更多