我有一个简单的模型,其中包含一个A
文档集合
[{ _key: 'doc1', id: 'a/doc1', name: 'Doc 1' }, { _key: 'doc2', id: 'a/doc2', name: 'Doc 2' }]
以及单个B
Edge集合,该集合将文档A
与每个边上保留的weight
整数结合起来。
[{ _key: 'xxx', id: 'b/xxx', _from: 'a/doc1', _to: 'a/doc2', weight: 256 }]
我尝试做一个“公共邻居”样式的查询,它将2个文档作为输入,并生成这些输入的公共邻居,沿着(每一边的)各自的权重。
例如用doc1
和doc26
输入,下面是要达到的目标:
[
{ _key: 'doc6', weightWithDoc1: 43, weightWithDoc26: 57 },
{ _key: 'doc12', weightWithDoc1: 98, weightWithDoc26: 173 },
{ _key: 'doc21', weightWithDoc1: 3, weightWithDoc26: 98 },
]
我成功地从一个单一的目标开始:
FOR associated, association
IN 1..1
ANY ${d1}
${EdgeCollection}
SORT association.weight DESC
LIMIT 20
RETURN { _key: associated._key, weight: association.weight }
然后成功地继续了文档的INTERSECTION
逻辑
FOR proj IN INTERSECTION(
(FOR associated, association
IN 1..1
ANY ${d1}
${EdgeCollection}
RETURN { _key: associated._key }),
(FOR associated, association
IN 1..1
ANY ${d2}
${EdgeCollection}
RETURN { _key: associated._key })
)
LIMIT 20
RETURN proj
但是我现在很难提取每一边的weight
,因为在内部的RETURN
子句上展开它会使它们在交集上互斥;因此不返回任何内容。
问题:
1.有没有办法做出某种“选择性的INTERSECTION
“,在过程中对一些字段进行分组?
1.是否有INTERSECTION
的替代方案来实现我的目标?
附加问题:
1.理想情况下,在成功提取weightWithDoc1
和weightWithDoc26
后,我希望按weightWithDoc1 + weightWithDoc26
提取SORT DESC
1条答案
按热度按时间8hhllhi21#
我自己找到了一个可以接受的答案
我认为相交后重新选择并不理想,也不是最佳的解决方案,所以我暂时不做决定,等待更好的答案。