使用其中一个属性的唯一值搜索对象的最佳方法

Optimal way to search for an object by using a unique value of one of it's properties

我有一个具有唯一值的 属性 对象。这可能不是一个很好的理由,但是这个 属性 不是我的 ID,因为它是一个列表,并且显示值由非打印字符组成。

我想检查是否存在具有此 属性 特定值的对象。到目前为止,我想到的选项是将其设为 ID,然后使用内置的 %ExistsID 方法,使用 SQL 查询并手动在全局搜索适当的下标。

第一个解决方案的问题是我更喜欢有一个人类可读的 ID。如果我很傻,请这么说。

第二种方法的问题是,在我看来,虽然 SQL 对这样的事情有好处,但在这种特殊情况下,在我看来,我正在启动这种繁琐的机制很多开销来获得我应该能够更容易获得的结果。再一次,我可能对此很愚蠢。

最后一个的问题在于,该值是一个主要由数字组成的 LB,存储为 $c(x,y,z)。我不确定如何搜索这个(即如何从我的列表中找到这个)。另外,看起来有点乱,而且我的水平太低了。

我觉得应该有一种更简单的 OO 方法来基于唯一(索引)值获取对象,我几乎可以肯定有,但我似乎无法在文档中找到它。自动生成的 %PropertyExists(UniqueValue) 会很好。

也许我应该编写自己的生成器方法? 如有任何建议,我们将不胜感激。

您可以使用 COUNT() 函数使用更简单的 SQL 查询,然后 return 如果计数为 1。 为此,请查看此线程: Select count(*) from result query

如果你查看 documentation,你会发现,class 中的每个唯一索引都有一些生成方法,例如 Open 和 Exists 和 Delete。使用这些方法中的任何一种,您都可以通过已知的唯一值打开任何对象。
所以,如果你有这样的索引

Index SomeInd On (Prop1, Prop2) [ Unique];

您可以打开对象,所以

set obj=##class(your.class).SomeIndOpen(prop1val, prop2val)

或者检查这样的对象是否已经存在,并获取这个对象的 ID。

if ##class(your.class).SomeIndExists(prop1val, prop2val, .id) {
    //
}

希望对你来说足够了,如果还不够,欢迎再问。