Comments (2)
:db/id
is not a real attribute. It is used to create “map” forms of an entity at insert stage. When you write
(d/transact! db [{:db/id -1 :name "Mazinger"}]
it means, essentially, this: take all key-value pairs from this map, convert them to [:db/add eid attr value]
form where attr=key from map, value=value from map, and eid (entity id) is a special key :db/id
from map. It’s just a convention. Results from entity
calls support this convention too, as they have to represent datoms as maps.
But inside DataScript everything is stored as flat datoms of form [e a v]
, no maps. If your entity has 10 attributes, there’ll be 10 distinct datoms. Maps are just a convenient view of these internals.
Queries are written in pattern-match style over actual flat datoms, so you cannot use :db/id
as it is not an actual datom attribute. When matching over entity id, just use first position, not last one:
(d/q `[:find ?name
:where [~new-id :name ?name]] @db)
BTW it’s not recommended to use actual values inside query. For parametrized queries, use addtional :in
agruments:
(d/q '[:find ?name
:in $ ?e
:where [?e :name ?name]] @db new-id)
from datascript.
Now it's crystal clear, many thanks for the detailed response!
from datascript.
Related Issues (20)
- Cannot compare xxx to xxx HOT 4
- Difference in pull query output between 1.0.1 and 1.3.11 HOT 3
- :db/cas should take a function HOT 3
- Nil values when building clojurescript for chrome extension HOT 3
- equality on ^Entity bypasses db HOT 3
- Improve Skypack "Package Score" for better devX HOT 2
- Attribute of composite tuple starting with colon is not working in js HOT 1
- How to hotfix aot code ?
- How to hot fix aot code?
- Rules - Required bindings doesn't evaluate correctly HOT 1
- Datascript101 link is dead HOT 1
- `get-else` fails when passed a lookup.
- `entity` returns entities for ids that don't exist HOT 2
- Is there any doc to demo idiom way to implement pagination in datascript? HOT 4
- Upsert of datom with composite tuple containing lookup ref fails HOT 5
- Recursive reverse lookups not working quite like it should HOT 1
- Lookup ref in composite tuple during upsert HOT 1
- do we have double vector type? HOT 2
- `:xform` is not called on ref attributes HOT 2
- Query performance with rules is much worse than "equivalent" inline clause HOT 3
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from datascript.