上一篇稍微看過了 Azure Cosmos DB 的簡單操作後,這一篇會來講解它的大致結構,可參考下圖:
每個 Azure 帳號可以創建多個 database,每個 database 可以包含多個 collections,在 collections 中包含多個 documents。而在 collection 中可以加入 stored procedures、triggers、User Defined Functions(UDFs) 等等。
我們先手動在 Data Explorer 介面上創建一個 TestDB
與 Fruits
collection。
接著我們使用程式插入一筆資料試試:
yarn add @azure/cosmos
const cosmos = require('@azure/cosmos');
const CosmosClient = cosmos.CosmosClient;
const endpoint = "填上 443 port 的 DB Endpoint";
const masterKey = "填上金鑰";
const client = new CosmosClient({ endpoint, auth: { masterKey } });
const databaseDefinition = { id: 'TestDB' };
const collectionDefinition = { id: 'Fruits' };
const documentDefinition = { name: 'Green Apple', category: 'Apple', data: Date.now() };
async function createFruit() {
const { body } = await client.database(databaseDefinition.id).container(collectionDefinition.id).items.create(documentDefinition);
console.log('Created item with content');
}
createFruit().catch(err => {
console.error(err);
});
點進去 Data explorer 的 Document 後可以看到剛才新增的資料如下:
接著我們要來講一下每個欄位的意思:
_rid 由系統產生的唯一值,並且有順序性,例如上一筆插入的資料此欄位值為 `SvJDANLJWUiBhB4AAAAAAA==` 則下一筆會是 `SvJDANLJWUiChB4AAAAAAA==`
_etag 由系統產生, 用來優化 concurrency
_ts 由系統產生,當作最後一次更新的 timestamp
_self 由系統產生,代表資源的一個 URI,通常為此種格式 `/dbs/{dbName}/users/{userId}/permissions/{permissionId}`
id 可以由使用者自行設定,如果沒有設定系統會自動產生。
初始化連線:
const client = new CosmosClient({ endpoint: endpoint, auth: { masterKey: masterKey } });
創建資料庫:
const { database } = await client.databases.createIfNotExists({ id: databaseId });
建立 collection:
const { container } = await client.database(databaseId).containers.createIfNotExists({ id: containerId });
執行 SQL
const querySpec = {
query: "SELECT VALUE r.children FROM root r WHERE r.lastName = @lastName",
parameters: [
{
name: "@lastName",
value: "Andersen"
}
]
};
const { result: results } = await client.database(databaseId).container(containerId).items.query(querySpec).toArray();
for (var queryResult of results) {
let resultString = JSON.stringify(queryResult);
console.log(`\tQuery returned ${resultString}\n`);
}
參考資料:https://docs.microsoft.com/en-us/azure/cosmos-db/sql-api-resources