MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Заявки в Postgres JSON масиви

Следният оригинален отговор се прилага само за Postgres 9.3. За отговор на Postgres 9.4 вижте актуализацията по-долу.

Това се основава на референтните отговори на Erwin , но е малко по-ясен за този въпрос.

Идентификаторите в този случай са bigint s, така че създайте помощна функция за преобразуване на JSON масив в Postgres bigint масив:

CREATE OR REPLACE FUNCTION json_array_bigint(_j json)
  RETURNS bigint[] AS
$$
SELECT array_agg(elem::text::bigint)
FROM json_array_elements(_j) AS elem
$$
  LANGUAGE sql IMMUTABLE;

Можехме просто да върнем текст лесно (и може би по-лесно за повторна употреба). масив тук вместо това. Подозирам индексиране на bigint е много по-бърз от текст но ми е трудно да намеря онлайн доказателства в подкрепа на това.

За изграждане на индекса:

CREATE INDEX "myindex" ON "mytable" 
  USING GIN (json_array_bigint("blob"->'ids'));

За заявки това работи и използва индекса:

SELECT * FROM "mytable" 
  WHERE '{185603363289694211}' <@ json_array_bigint("blob"->'ids');

Правейки това също ще работи за заявки, но не използва индекса:

SELECT * FROM "mytable" 
  WHERE 185603363289694211 = ANY(json_array_bigint("blob"->'ids'));

Актуализация за 9.4

Postgres 9.4 представи jsonb Тип. Това е добър SO отговор за jsonb и кога трябва да го използвате върху json . Накратко, ако някога правите заявки за JSON, трябва да използвате jsonb .

Ако изградите колоната си като jsonb , можете да използвате тази заявка:

SELECT * FROM "mytable"
  WHERE blob @> '{"ids": [185603363289694211]}';

@> е Postgres' съдържа оператор, документиран за jsonb тук .Благодарение на отговора на Ален за това, че ми обърнахте внимание.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. secureIndex в mongodb

  2. получаване на InvalidOperationException при заявка с AsQueryable в C#

  3. Грешка на Mongo при използване на агрегиране:сортиране надхвърли лимита на паметта

  4. Върната стойност на Meteor като низ

  5. Интегриране на mongodb с neo4j, има ли API, който да ги свърже?