如何通过dataview实现定位到具体的笔记的标题的位置?

各位大神好,关于dataview的应用想请教一下,请问如何可以通过dataview实现定位到具体的笔记的标题的位置呢?
我尝试一下说明我目前遇到的困惑以及思考如何解决的想法:
我的工作主要是医药投资,在一年多的使用OB过程也积累了非常多的笔记。不过随着笔记数量的增加,如何快速建立笔记间的关系和笔记之间的自动化索引这个问题越来越重要。
例如,药物A它属于一个靶点B,靶点B里又有不同的药物C和药物D。
目前我的工作流是做好一个靶点B的MOC,在其中一个标题“研发进展”中,放进了[[药物A]]、[[药物C]]和[[药物D]];
[[药物A]]、[[药物C]]和[[药物D]]分别有一个“临床数据”的标题,里面放了他们各自的临床数据。
那么在实际研究中,有两个实际应用,一个是A、C和D三个药物需要对比一下疗效,另一个是未来还会有[[药物E]]、[[药物F]]等等不断的新药。那么如何可以在目前已有的A、C、D品种方便对比,以及未来有[[药物E]]、[[药物F]]笔记时,自动更新在药物A、C、D的“临床数据”标题下?

目前解决的思路:
现有药物的A、C、D品种,在“临床数据”标题下手动复制他们各自的笔记小标题,例如在[[药物A]]“临床数据”标题下,复制[[药物C#临床数据]],直到每个品种的“临床数据”标题下都有这三个品种对应的小标题链接。但是这样操作比较繁琐,以后有新的药物出现还得一个个的复制,相当麻烦。
因此是否可以通过dataview来实现自动更新?
尝试:将每个药物笔记的“临床数据”标题下添加#靶点B,然后使用dataview写入一下代码(我基本不会用dataview):

table 同类品种, file.mtime as 创建时间
from #靶点/B

然后确实能出现A、C、D的笔记名称了,可是如何定位到他们各自的“临床数据”小标题呢?或者还要加点什么能实现自动索引的功能呢?
请各位大神出谋划策~非常感谢!

Q1:要求:ACD临床数据自动对比
Q2:要求:若新加入EF也能自动列入ACD对比中?

思考了一下,是上面的意思吗?

1 个赞

嗯嗯,大致是这个意思,能请问能实现自动索引吗?

我用dataview不够熟练,
建议可以先看看bon大的文章,估计是用::实现

@boninall 或许可以帮助你

谢谢你的提醒,我尝试了一下,确实可行,现在就是怎么样在设置模板的时候,能够自动在临床数据标题下添加成 临床数据::[[标题#临床数据]

思路不复杂,但是dataview侧重查询结果的展示,对笔记内容的修改和呈现的能力暂时没有开放出来。基本思路:创建两种类型的笔记,一种药物笔记,一种靶向笔记。每类笔记在模板里可以设置好内置变量。然后分别在药物笔记里嵌入代码,在靶向的MOC笔记里嵌入代码。
1、创建药物笔记





2、创建靶向笔记

dv.paragraph("所有靶向B的药物:");
let myclassification = dv.current().myname;
let pages = dv.pages().where(p=>p.mytype == "药物" && p.myclassification == "靶向B");
dv.list(pages.file.link);

靶向笔记运行结果:

3、药物笔记里构造header引用格式的内容—这里试了很多方法,最终没有如愿,已经可以构造出![[XXX#XXX]]字符串,但是无奈无法在编辑模式下显示出来,在预览模式下显示出来有无法让ob识别成笔记header内容的链接,很是无奈,附上代码:

![[`$= {dv.pages().where(p=>p.mytype == dv.current().mytype && p.myclassification == dv.current().myclassification && p.myname != dv.current().myname).file[0].name + "#临床数据";}`]]


运行完的效果:

4、药物笔记页面内的代码:

dv.paragraph("---")
let myname = dv.current().myname;
dv.paragraph("以下是和" + myname + "比对疗效:");
let t = dv.current().mytype;
let c = dv.current().myclassification;
let pages = dv.pages().where(p=>p.mytype == t && p.myclassification == c && p.myname != myname);

let h = "临床数据";
for(let group of pages){
	dv.paragraph('"' + group.file.name + '" '+ "的临床数据是:");
	dv.paragraph(group.file.link.toString())
}


上面这段代码也达不到在header后面追加笔记内容的效果,原因在于dataview里的Link类,在构造方法内markdown()方法里,传递的type始终为file,所以没发构造出来。我找到了源代码的位置:

5、小结
感觉dataviewjs用起来的时候很多障碍,作者还在开发,很多函数没有封装出来,对笔记本身的操作没法顺畅的进行,这个也要一步一步走吧。
我抛个砖哈,看看论坛里的大佬怎么解决这个问题,你也继续试试哈!

1 个赞

大神感谢您的回复,我仔细看了一下您的耐心回复,可是有几个问题,可能我无法将您的代码应用到我的笔记系统中。一个是我经常处于编辑的状态,所以可能无法接受占了大量篇幅的代码,另一个是我是个代码盲,看了您的代码很茫然无法理解其中的意思。
目前我初步解决了目前这个问题,一方面实现了药物自动索引到CAR-T的靶点笔记,另一方面也实现了和其他同类药物的自动索引。以下为我具体的应用:

CAR-T为后面两个药物的靶点,也是一个MOC,里面包括了涉及这个靶点药物的临床数据、销售情况等汇总(实际就是起个标题,然后放入涉及[[药物#小标题]]),例子是以销售数据为例,Yescarta和Kymriah是两个药物名称。
通过在两个药物的笔记正文开头插入如同的文字段,如图,然后就能在CAR-T这个靶点的MOC中显示两个药物的销售数据情况。


并且分别将dataview代码放到两个药物笔记的#销售数据 标题下,这样也实现了相关品种的销售数据自动索引。这样子一方面以后只要再有其他的相同靶点的药物笔记,也在新的笔记上打上#品种/CAR-T这个标签,就能自动添加到CAR-T的靶点笔记,和其他同类药物的笔记中。初步解决了这个问题。

1 个赞

好棒!~也给了我很多启发~

解决问题最重要,什么姿势不重要,哈哈,多多探讨!