对于 table cmdb_rel_ci,我想检索具有 "type=In Rack::Rack contains" 计数的唯一 parent.sys_class_name

For table cmdb_rel_ci, I want to retrieve unique parent.sys_class_name with count for "type=In Rack::Rack contains"

对于 table cmdb_rel_ci,我想检索具有 "type=In Rack::Rack contains" 计数的唯一 parent.sys_class_name。我正在开箱即用的实例中进行练习。 在table级别URL如下:

URL

我想使用下面的脚本从上面 URL 检索结果。

var count = new GlideAggregate('cmdb_rel_ci');
count.addQuery('type','e76b8c7b0a0a0aa70082c9f7c2f9dc64');// sys_id of type In Rack::Rack contains e76b8c7b0a0a0aa70082c9f7c2f9dc64
count.addAggregate('COUNT', 'parent.sys_class_name');
count.query();

while(count.next()){  
  var parentClassName = count.parent.sys_class_name.toString();
  var parentClassNameCount = count.getAggregate('COUNT','parent.sys_class_name');
  gs.log(parentClassName + " : " + parentClassNameCount );
}
问题是我的 parentClassName 为空。

试试这个:

var parentClassName = count.getValue("parent.sys_class_name")

因为它是一个 GlideAggregate 查询(而不是 GlideRecord),发出的查询不会返回目标 table 上的所有字段。对于 GlideRecord,dot-walking 通过引用字段(例如 parent.sys_class_name)自动解析引用的记录以提供对其字段值的访问。这是因为 driving/original 查询带回了 parent 字段的值。 GlideAggregate 不会发生这种情况。这种情况下的查询基本上是这样的:

SELECT cmdb1.`sys_class_name` AS `parent_sys_class_name`, count(*) 
FROM (cmdb_rel_ci cmdb_rel_ci0  LEFT JOIN cmdb cmdb1 ON cmdb_rel_ci0.`parent` = cmdb1.`sys_id` )  
WHERE cmdb_rel_ci0.`type` = 'e76b8c7b0a0a0aa70082c9f7c2f9dc64' 
GROUP BY cmdb1.`sys_class_name` 
ORDER BY cmdb1.`sys_class_name` 

因此,您实际上可以专门访问正在分组的 dot-walked sys_class_name,但不能 通过 dot-walk。对 getValue("parent.sys_class_name") 的调用预计会解析为别名为 parent_sys_class_name.

的返回列

也就是说,根据用户的期望,您所做的可能也可以,所以您在这里没有做错任何事。