首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何查找Datascript中的多基数属性是否包含元素?

如何查找Datascript中的多基数属性是否包含元素?
EN

Stack Overflow用户
提问于 2020-06-05 05:49:28
回答 1查看 148关注 0票数 1

我有一个Datascript数据库,它是这样的:

代码语言:javascript
复制
{:block/id {:db/unique :db.unique/identity}
 :block/children {:db/cardinality :db.cardinality/many}
}

:block/children包含其他块的:block/id

我一直在尝试编写一个查询来查找哪个块有另一个块作为它的子块。

下面是我尝试过的一个例子:

代码语言:javascript
复制
(ds/q '[:find ?parent-ds-id
        :where
        [1100 :block/id ?block-id]
        [?parent-ds-id :block/children ?block-id]]
      @conn)

我只是拿回空集作为回报。我应该如何装扮?block-id,才能得到将?block-id作为其子级的块的实体ID?(每个块只有一个父级)

EN

回答 1

Stack Overflow用户

发布于 2020-06-05 14:45:38

此问题可能与您正在使用的数据有关。这是您所追求的一个工作示例:

代码语言:javascript
复制
(let [schema {:block/id {:db/unique :db.unique/identity}                                                                                                                                       
              :block/children {:db/valueType :db.type/ref                                                                                                                                      
                               :db/cardinality :db.cardinality/many}}
      conn (d/create-conn schema)                                                                                                                                                              
      idify (fn [id] (* 100 id)) ; just fake some id
      block (fn [id] {:db/id (idify id) :block/id id})                    
      rel (fn [parent-id child-id] {:db/id (idify parent-id) :block/children (idify child-id)})]
  (d/transact! conn [(block 1)               
                     (block 2)               
                     (block 3)
                     (rel 1 2)
                     (rel 1 3)])  
  (d/q                       
   '[:find ?parent-id                
     :in $ ?child-id           
     :where                                   
     [?child :block/id ?child-id] 
     [?parent :block/children ?child]
     [?parent :block/id ?parent-id]]
   @conn                                  
   2))                                                 
; → #{[1]}

尽管你的block- it很可能已经是你想要用于你的实体的唯一的it了,但是这里使用了不同的实体it,只是为了清楚地说明如何组合数据。

此查询将建立:

  • 我们想要具有给定块id的子实体(2通过参数)
  • 我们想要父实体,它引用了子实体
  • 我们想要父实体的块id
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62204735

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档