当前位置: 首页 > news >正文

第六章 管理文档 - 插入或替换文档:%SaveDocument()

文章目录

  • 第六章 管理文档 - 插入或替换文档:%SaveDocument()
  • 插入或替换文档:`%SaveDocument()`
  • 计算数据库中的文档数:`%Size()`
  • 获取数据库中的文档:`%GetDocument()`

第六章 管理文档 - 插入或替换文档:%SaveDocument()

插入或替换文档:%SaveDocument()

可以使用文档 ID 或数据选择条件在数据库中插入或替换文档。

%SaveDocument()%SaveDocumentByKey()法保存文档、插入新文档或替换现有文档。 %SaveDocument()通过documentId指定文档; %SaveDocumentByKey() 通过键名和键值指定文档。

如果不指定 documentId%SaveDocument() 会插入一个新文档并生成一个新 documentId。如果指定 documentId,它将用该 documentId 替换现有文档。如果指定 documentId 但该文档不存在,则会生成 ERROR #5809 异常。

文档数据由一个或多个键:值对组成。如果为定义为唯一的键属性指定重复值,则会生成 ERROR #5808 异常。

%SaveDocument()%SaveDocumentByKey() 方法返回对数据库文档类实例的引用。这始终是 %DocDB.Document 的子类。该方法返回数据类型为%DocDB.Document

以下示例插入三个新文档并为其分配 documentId。然后,它将 documentId 2 标识的文档的全部内容替换为指定的内容:

  IF $SYSTEM.DocDB.Exists("People"){ SET db = ##class(%DocDB.Database).%GetDatabase("People")}ELSE {SET db = ##class(%DocDB.Database).%CreateDatabase("People") }WRITE db.%Size(),!DO db.%CreateProperty("firstName","%String","$.firstName",0)SET val = db.%SaveDocument({"firstName":"Serena","lastName":"Williams"})SET val = db.%SaveDocument({"firstName":"Bill","lastName":"Faulkner"})SET val = db.%SaveDocument({"firstName":"Fred","lastName":"Astare"})WRITE "Contains ",db.%Size()," documents: ",db.%ToJSON()SET val = db.%SaveDocument({"firstName":"William","lastName":"Faulkner"},2)WRITE !,"Contains ",db.%Size()," documents: ",db.%ToJSON()

以下示例将 %Id() 方法链接到每个 %SaveDocument(),在插入或替换每个文档时返回每个文档的 documentId

  IF $SYSTEM.DocDB.Exists("People"){ SET db = ##class(%DocDB.Database).%GetDatabase("People")}ELSE {SET db = ##class(%DocDB.Database).%CreateDatabase("People") }DO db.%CreateProperty("firstName","%String","$.firstName",0)WRITE db.%SaveDocument({"firstName":"Serena","lastName":"Williams"}).%Id(),!WRITE db.%SaveDocument({"firstName":"Bill","lastName":"Faulkner"}).%Id(),!WRITE db.%SaveDocument({"firstName":"Fred","lastName":"Astare"}).%Id(),!WRITE "Contains ",db.%Size()," documents: ",db.%ToJSON()WRITE db.%SaveDocument({"firstName":"William","lastName":"Faulkner"},2).%Id(),!WRITE !,"Contains ",db.%Size()," documents: ",db.%ToJSON()

计算数据库中的文档数:%Size()

要计算数据库中的文档数量,请调用 %Size()方法:

  SET doccount = db.%Size()WRITE doccount

获取数据库中的文档:%GetDocument()

要通过 %DocumentId 从数据库检索单个文档,请调用 %GetDocument()方法,如以下示例所示:

  DO db.%GetDocument(2).%ToJSON()

此方法仅返回 %Doc 属性内容。例如:

{"firstName":"Bill","lastName":"Faulkner"}

该方法返回类型为%Library.DynamicAbstractObject

如果指定的 %DocumentId 不存在,%GetDocument() 会生成错误 #5809 异常:“未找到要加载的对象”。

可以使用 %GetDocumentByKey(),按键值从数据库中检索单个文档。

还可以使用 %FindDocuments() 方法通过 %DocumentId 从数据库返回单个文档。例如:

  DO db.%FindDocuments(["%DocumentId",2,"="]).%ToJSON()

此方法返回完整的 JSON 文档,包括其包装器:

{"sqlcode":100,"message":null,"content":[{"%Doc":"{\"firstName\":\"Bill\",\"lastName\":\"Faulkner\"}",
"%DocumentId":2,"%LastModified":"2018-03-06 18:59:02.559"}]}

相关文章:

  • 算法学习系列(三十五):贪心(杂)
  • 简洁高效的短链接:优化互联网体验
  • C#,二分法(Bisection Method)求解方程的算法与源代码
  • 寿司转盘,用 C 编码
  • FPGA中的模块调用与例化
  • 云计算基础-存储基础
  • 【OpenAI Sora】 最强文生视频怎么用-新手小白必看教程
  • 类和结构体的区别
  • MATLAB|基于改进二进制粒子群算法的含需求响应机组组合问题研究(含文献和源码)
  • AI在职场变革中的引领作用:从本土实践看智能技术带来的效率跃升与行业革新
  • YML 静态类获取值
  • php基础学习之可变函数(web渗透测试关键字绕过rce和回调函数)
  • 【leetcode刷题之路】面试经典150题(1)——数组/字符串
  • 树和二叉树的基本知识
  • UPC训练赛二十/20240217
  • [译]Python中的类属性与实例属性的区别
  • __proto__ 和 prototype的关系
  • 【翻译】Mashape是如何管理15000个API和微服务的(三)
  • 【跃迁之路】【477天】刻意练习系列236(2018.05.28)
  • 2017-08-04 前端日报
  • C++11: atomic 头文件
  • flutter的key在widget list的作用以及必要性
  • JavaScript学习总结——原型
  • Java多态
  • Webpack 4 学习01(基础配置)
  • Webpack 4x 之路 ( 四 )
  • WePY 在小程序性能调优上做出的探究
  • 爱情 北京女病人
  • 闭包,sync使用细节
  • ------- 计算机网络基础
  • 前端面试题总结
  • 悄悄地说一个bug
  • 删除表内多余的重复数据
  • 使用阿里云发布分布式网站,开发时候应该注意什么?
  • 视频flv转mp4最快的几种方法(就是不用格式工厂)
  • 一道闭包题引发的思考
  • 译有关态射的一切
  • 在Unity中实现一个简单的消息管理器
  • 自制字幕遮挡器
  • 函数计算新功能-----支持C#函数
  • 积累各种好的链接
  • #FPGA(基础知识)
  • ${factoryList }后面有空格不影响
  • (1)Nginx简介和安装教程
  • (11)MSP430F5529 定时器B
  • (12)Linux 常见的三种进程状态
  • (2022 CVPR) Unbiased Teacher v2
  • (补)B+树一些思想
  • (第一天)包装对象、作用域、创建对象
  • (二)windows配置JDK环境
  • (附源码)spring boot校园健康监测管理系统 毕业设计 151047
  • (免费领源码)Java#ssm#MySQL 创意商城03663-计算机毕业设计项目选题推荐
  • (一)搭建springboot+vue前后端分离项目--前端vue搭建
  • (转载)OpenStack Hacker养成指南
  • ..回顾17,展望18