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

本文涉及的产品
表格存储 Tablestore,50G 2个月
简介: 本文将结合电商订单场景为例,介绍表格存储 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。

varclient=require('./client');
varparams= {
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”。样例中模拟了一万条订单数据,这里不作展示。

varTableStore=require('../index.js');
varclient=require('./client');
varparams= {
tableName: "order",
condition: newTableStore.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”的记录

varTableStore=require('../index.js');
varclient=require('./client');
varparams= {
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字符串类型。关于索引字段类型的介绍请参考多元索引概述

varclient=require('./client');
varTableStore=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);
});

搜索数据

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

varclient=require('./client');
varTableStore=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”的订单,并统计了符合条件的行数。

varclient=require('./client');
varTableStore=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”之间的订单。并统计了行数。

varclient=require('../client');
varTableStore=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多元索引。

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

删除数据表

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

varclient=require('./client');
varparams= {
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

相关实践学习
消息队列+Serverless+Tablestore:实现高弹性的电商订单系统
基于消息队列以及函数计算,快速部署一个高弹性的商品订单系统,能够应对抢购场景下的高并发情况。
阿里云表格存储使用教程
表格存储(Table Store)是构建在阿里云飞天分布式系统之上的分布式NoSQL数据存储服务,根据99.99%的高可用以及11个9的数据可靠性的标准设计。表格存储通过数据分片和负载均衡技术,实现数据规模与访问并发上的无缝扩展,提供海量结构化数据的存储和实时访问。 产品详情:https://www.aliyun.com/product/ots
目录
相关文章
|
1月前
|
Web App开发 缓存 JavaScript
深入浅出Node.js后端开发
【9月更文挑战第26天】本文将引导你了解Node.js的基本原理,并通过实际案例展示如何在后端开发中应用它。我们将从Node.js的核心概念讲起,逐步深入到构建一个完整的后端服务,最后探讨如何优化你的Node.js应用。准备好让你的开发技能更上一层楼了吗?让我们一起潜入Node.js的世界!
|
17天前
|
JavaScript 前端开发 NoSQL
深入浅出Node.js后端开发
本文将引导你了解Node.js的基础知识,包括安装、运行环境搭建以及简单的代码示例。通过阅读本文,你将学会如何利用Node.js进行后端开发,并理解异步编程和事件驱动模型的核心概念。文章还将介绍一些实用的库和框架,帮助你快速开始Node.js项目。
45 4
|
19天前
|
JavaScript 前端开发 开发者
VUE 开发——Node.js学习(一)
VUE 开发——Node.js学习(一)
47 3
|
21天前
|
Web App开发 JavaScript 前端开发
深入浅出Node.js后端开发
【9月更文挑战第35天】本文将带你走进Node.js的世界,从基础概念到实战应用,一步步揭示Node.js在后端开发中的魅力。我们将通过实际代码示例,让你轻松掌握Node.js的开发技巧,开启你的后端开发之旅。
|
4天前
|
JavaScript 前端开发 开发工具
【Azure Developer】使用JavaScript通过SDK进行monitor-query的client认证报错问题
AADSTS90002: Tenant 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' not found. Check to make sure you have the correct tenant ID and are signing into the correct cloud. Check with your subscription administrator, this may happen if there are no active subscriptions for the tenant.
|
10天前
|
Web App开发 存储 JavaScript
深入浅出Node.js后端开发
【10月更文挑战第7天】本文将带你进入Node.js的世界,从基本概念、环境搭建到实际案例,逐步深入探索Node.js在后端开发中的应用。我们将通过一个简单的在线聊天室项目,学习如何利用Node.js进行网络编程和数据处理,让你对Node.js有更全面的认识。
13 3
|
13天前
|
Web App开发 JavaScript 前端开发
深入浅出Node.js后端开发
【10月更文挑战第4天】本文将带你走进Node.js的世界,从基础的搭建到高级的应用,一步步揭示Node.js的强大与便捷。我们将通过实际的代码示例,让你在轻松的氛围中学习并掌握Node.js,开启你的后端开发之旅。
|
14天前
|
Web App开发 JavaScript 前端开发
深入浅出Node.js后端开发
【10月更文挑战第3天】在数字化时代的浪潮中,后端开发作为技术架构的核心,承载着数据处理和业务逻辑的重任。Node.js以其非阻塞I/O、事件驱动的特性,在众多后端技术中脱颖而出,成为高效、轻量级后端解决方案的代名词。本文将带领读者深入理解Node.js的精髓,从基础概念到实战应用,逐步揭示如何利用Node.js构建高性能的后端服务。通过浅显易懂的语言和实际案例分析,我们将探索Node.js在现代后端开发中的应用及其带来的变革。无论你是初学者还是有经验的开发者,这篇文章都将为你打开一扇通往Node.js世界的大门,让你领略其背后的哲学和技术之美。
|
21天前
|
Web App开发 JavaScript 前端开发
深入浅出Node.js后端开发
【9月更文挑战第35天】本文将带你走进Node.js的世界,探索这个强大的后端开发平台。我们将从基础开始,逐步深入,最后以一个简单的代码示例结束,让你对Node.js有更深入的理解。无论你是前端开发者还是后端开发者,这篇文章都将为你提供有价值的信息。让我们一起开启Node.js的学习之旅吧!
|
13天前
|
Web App开发 JSON JavaScript
深入浅出:Node.js后端开发入门与实践
【10月更文挑战第4天】在这个数字信息爆炸的时代,了解如何构建一个高效、稳定的后端系统对于开发者来说至关重要。本文将引导你步入Node.js的世界,通过浅显易懂的语言和逐步深入的内容组织,让你不仅理解Node.js的基本概念,还能掌握如何使用它来构建一个简单的后端服务。从安装Node.js到实现一个“Hello World”程序,再到处理HTTP请求,文章将带你一步步走进Node.js的大门。无论你是初学者还是有一定经验的开发者,这篇文章都将为你打开一扇通往后端开发新世界的大门。

热门文章

最新文章