update
Update data in UniCloud database collections by specifying collection name, query conditions, and new data values.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| collection | Yes | 集合名称 | |
| where | Yes | 查询条件 (JQL格式) | |
| data | Yes | 要更新的数据 (object) |
Implementation Reference
- database.js:285-299 (handler)Handler function for the 'update' MCP tool. Extracts parameters and calls the core updateDatabase function, formatting the response for MCP.async function handleUpdateTool(params, dbUrl) { const { collection, where, data } = params; try { const result = await updateDatabase(collection, where, data, dbUrl); return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }], }; } catch (error) { return { content: [{ type: 'text', text: error.message }], isError: true, }; } }
- database.js:403-410 (schema)Schema definition for the 'update' tool parameters using Zod: collection (string), where (record), data (record).updateTool: { name: 'update', params: { collection: z.string().describe('集合名称'), where: z.record(z.any()).describe('查询条件 (JQL格式)'), data: z.record(z.any()).describe('要更新的数据 (object)'), }, handler: (params) => handleUpdateTool(params, dbServiceUrl),
- database.js:367-423 (registration)Tool definitions including the 'update' tool registration with name, params schema, and handler reference within getToolDefinitions.function getToolDefinitions(z, options = {}) { // 如果有传入dbServiceUrl则优先使用,否则使用配置 const dbServiceUrl = options.dbServiceUrl || DEFAULT_DB_URL; return { // 查询工具 queryTool: { name: 'query', params: { collection: z.string().describe('集合名称'), where: z.record(z.any()).describe('查询条件 (JQL格式)'), field: z.record(z.any()).optional().describe('返回字段 (可选)'), orderBy: z .object({ field: z.string(), order: z.enum(['asc', 'desc']), }) .optional() .describe('排序条件 (可选)'), limit: z.number().optional().describe('限制返回数量 (可选)'), skip: z.number().optional().describe('跳过记录数 (可选)'), }, handler: (params) => handleQueryTool(params, dbServiceUrl), }, // 添加工具 addTool: { name: 'add', params: { collection: z.string().describe('集合名称'), data: z.record(z.any()).describe('要添加的数据 (object/array)'), }, handler: (params) => handleAddTool(params, dbServiceUrl), }, // 更新工具 updateTool: { name: 'update', params: { collection: z.string().describe('集合名称'), where: z.record(z.any()).describe('查询条件 (JQL格式)'), data: z.record(z.any()).describe('要更新的数据 (object)'), }, handler: (params) => handleUpdateTool(params, dbServiceUrl), }, // 删除工具 removeTool: { name: 'remove', params: { collection: z.string().describe('集合名称'), where: z.record(z.any()).describe('查询条件 (JQL格式)'), }, handler: (params) => handleRemoveTool(params, dbServiceUrl), }, }; }
- index.js:47-50 (registration)Final MCP server registration of the 'update' tool using server.tool() with name, params, and handler from database.js tools.tools.updateTool.name, tools.updateTool.params, tools.updateTool.handler );
- database.js:136-172 (helper)Core helper function that performs the actual database update by sending a POST request to the uniCloud DB service with JQL operation.async function updateDatabase(collection, where, data, dbUrl = DEFAULT_DB_URL) { try { const controller = new AbortController(); const timeoutId = setTimeout(() => controller.abort(), REQUEST_TIMEOUT); // 使用传入的dbUrl或默认URL const targetUrl = dbUrl || DEFAULT_DB_URL; // console.log('更新操作使用URL:', targetUrl); const response = await fetch(targetUrl, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ operation: { collection, action: 'update', where, data, }, }), signal: controller.signal, }); clearTimeout(timeoutId); const result = await response.json(); if (result.code !== 0) { throw new Error(result.msg || '更新失败'); } return result.data; } catch (error) { if (error.name === 'AbortError') { throw new Error(`更新超时: 请求超过${REQUEST_TIMEOUT}毫秒`); } throw new Error(`更新错误: ${error.message}`); }