dataview如何查找链接属性的metadata

dataview如何查找链接属性的metadata


遇到的问题

现在有三个文件,打工人小张:小张.md,就职公司阿里巴巴.md,描述小张在阿里的职业经历的文件小张&阿里.md。在小张&阿里.md中有一系列的inline field,比如

就职时间:: 2022-10-01
离职时间:: 2023-07-01
求职人:: [[小张]]
就职公司:: [[阿里巴巴]]
职位:: 高级工程师

(由于front matter不支持链接的更新,所以就写在inline field里面。inline field全是这种一行一行的key:value描述)
实际上有很多人,也有很多公司,每个人的每一段从业经历都记录在每一个类似小张&阿里.md的文件中。
现在想在小张.md中写入代码,把所有他就职过的公司以及相关信息都table出来。我写的代码提示”No results to show for table query“

let employee = dv.current().file.link
let files=dv
	.pages('"200.打工人"')
	.filter(p => p.求职人 == employee)

let values=files.map(async(file)=>{
	return [
		file.就职时间,
		file.离职时间,
		file.就职公司,
		file.职位
		]
})

Promise.all(values).then((values)=>{
	dv.table(["就职时间","离职时间","就职公司","职位"],values);
})

已尝试的解决方案

我理解可能涉及到值的类型,因为我如果把.filter(p => p.求职人 == employee)换成.filter(p => p.职位 == "高级工程师"),是能够table出来的,证明其他代码没问题。但是逻辑还是不对。

以上,由于零基础刚开始看javascript和typescript,引发两个思考:
1、link类型应该怎么写才可以?因为我把小张&阿里.mdemployeeconsole.log了一下,比对了属性是一样的,不太明白为什么会报错。


(这两个值难道不能完美匹配嘛)
2、.filter的参数要求不是很明白,因为我把里面写成.filter((p) => {p.职位 == "高级工程师"})也会报错,难道()=>{}或者p=>{}这种复杂写法就不能被识别吗?这里可能设计到js基础知识,不是很理解。

希望大家来指点。

这块的问题解决了,主要是箭头函数和return的关系。

前面的问题还没懂,当key:value中的value是个链接的时候,filter不能过滤了吗?
顶顶

经过 lazyloong大佬的指点,终于得到了解决方案,
1、let employee = dv.current().file.link修改为let employee = dv.current().file.path
2、.filter(p => p.求职人 == employee)修改为.filter(p => p.求职人?.path == employee)

再次感谢lazyloong大佬!