jsonb is limited in it's querying capabilities. you're essentially casting the json as a string when storing and querying, it's not truly json. therein lies the advantage of document model, native secondary indexes, $<queries> for everry nested layer, etc.
Postgres's jsonb format is definitely not "essentially" a string. You can get native indexes on json fields in Postgres, and you can query fields however you like.
they are surrounded by quotes, is that not a string ?
If a man is surrounded by trees, does he become a grove?
Those are json literals in the SQL query. That has nothing at all to do with how json is stored in jsonb columns in the database itself.
This is among the most shallow comment I ever saw on HN. Just because `TreeSet a = [1,2,3]` is surrounded by [ and ] does that mean `a` is a list? When you do `jsonb j = '{"a":"c"}` postgres builds a separate data structure for you from that json, which allows you to use a btree index.
SELECT jdoc->'guid', jdoc->'name' FROM api
WHERE jdoc @> '{"tags": ["qui"]}';
vs
db.api.find({tags:"qui"}, {guid:1, name:1})
Not sure what you are trying to show here, but only SQL statement helped me to understand that {guid: 1, name: 1} is to show these fields.
I don't believe that is true, as far as I understand jsonb is a binary representation, not text. And there are certainly ways to index jsonb columns, either a function index on a particular jsonb expression or a GIN index so that you can perform contains (@>) queries against the whole jsonb contents.