Сотрудничество для обмена знаниями о серверных технологиях

Оглавление
Операторы и функции PostgreSQL JSON
Работа с базой данных может быть интересной, если вы можете манипулировать данными по своему усмотрению. Акита Накарми поделился операторами и функциями Postgres JSON и JSONB, чтобы избавить разработчиков от утомительной и сложной работы и упростить манипулирование данными на уровне базы данных.
PostgreSQL предлагает двоичное представление данных JSON, jsonb начиная с версии 9.4. Типы данных json и jsonb в чем-то похожи, основное различие между ними состоит в том, что json данные хранятся как точная копия входного текста JSON, тогда как jsonb хранит данные в разложенной двоичной форме. Это дает значительное ускорение для увеличения производительности.
Чтобы узнать больше о типе данных thejsonb, перейдите по этой ссылке.
Мы будем использовать приведенную ниже таблицу для наших примеров операторов и функций.
Table Name: users
name | districts | metadata
------+-----------------------+-----------------
Harry |["bajhang","kailali"] |{"age":23,"gender":"male"}
Rahul |["lalitpur"] |{"age":20,"gender":"male"}
Radhika|["bhaktapur","achham"]|{"age":28,"gender":"female"}
Операторы (‘?’, ‘? |’, ‘? &’)
Оператор ‘?’ Проверяет, присутствует ли данная строка в качестве ключа верхнего уровня в значении JSON.
where '{"Bhaktapur", "lalitpur","aacham}'::jsonb ? 'lalitpur'
‘? |’ Оператор проверяет, существуют ли заданные строки массива как ключи верхнего уровня.
where '{"Bhaktapur", "lalitpur","aacham}'::jsonb ?| array ['lalitpur','kathamdu']
Оператор ‘? &’ Проверяет, существуют ли все эти строки массива как ключи верхнего уровня.
where '{"Bhaktapur", "lalitpur","aacham"}'::jsonb ?& array ['lalitpur','aacham']
Функции
1. json_array_elements ()
Эта функция расширяет массив JSON до набора значений JSON.
select json_array_elements(users.districts)as district from users
Выход:
district ----------- "bajhang" "kailali" "lalitpur" "bhaktapur" "aacham"
2. jsonb_exists_any ()
Эта функция проверяет, существует ли данное значение в данных JSON.
select name,districts from users where jsonb_exists_any(districts::jsonb ,array['achham'])
Выход:
name | districts -------+--------------------- Radhika|["bhaktapur","achham"]
3. json_each ()
Эта функция расширяет объект JSON в набор пар ключ / значение.
select name,detail.key,detail.value from users,json_each(users.metadata) As detail;
Выход:
name | key | value -------+--------------- Harry | age |23 Harry | gender|"male" Rahul | age |20 Rahul | gender|"male" Radhika| age |28 Radhika| gender|"female"
4. json_object_keys ()
Эта функция возвращает набор ключей в объекте JSON.
select name,key from users,json_object_keys(users.metadata) As key;
Выход:
name | key -------+------- Harry | age Harry | gender Rahul | age Rahul | gender Radhika| age Radhika| gender
5. json_build_object ()
Эта функция создает объект JSON из списка аргументов.
select * from json_build_object('age',19,'gender','female') As metadata
Выход:
metadata
----------------------------
{"age":19,"gender":"female"}
Дополнительные сведения см. В документации PostgreSQL здесь.
Предоставить / внедрить в Vue.js
Некоторое время назад мы начали использовать Vue.js для создания сложного пользовательского интерфейса в наших проектах Laravel. По мере того, как проект становится больше и сложнее, любая структура неизбежно станет беспорядочной. Сандип Шреста поделился своим опытом внедрения зависимостей в Vue, благодаря которому передача данных от родительского компонента к его потомкам похожа на прохладный ветерок в жаркий летний день.
Provide и Inject используются вместе, чтобы позволить компоненту-предку служить в качестве инжектора зависимостей для всех его потомков, независимо от того, насколько глубока иерархия компонентов, пока они находятся в одной родительской цепочке.
(Например, родительский компонент может вводить сообщения проверки во входные компоненты.)
Пример:
// parent component providing 'menuOptions'
var ParentComponent = {
data(){
return {
menu = ['Home', 'About','Contact'],
}
},
provide: {
menuOptions: this.menu
},
// ...
}
// child component injecting 'menuOptions'
var ChildComponent = {
inject: ['menuOptions'],
created () {
console.log(this.menuOptions)
// output => ['Home', 'About','Contact']
}
// ...
}
Вы также можете предоставить и внедрить функцию.
var ParentComponent = {
data(){
return {
menu = ['Home', 'About','Contact'],
}
},
methods: {
getMenu: function() {
return this.menu;
},
setMenu: function(data) {
this.menu = data;
},
},
provide: function() {
return {
getMenu:this.getMenu,
setMenu:this.setMenu
}
},
}
var ChildComponent = {
inject: ["getMenu","setMenu"],
computed:{
menu:{
get:function(){
return this.getMenu()
},
set:function(d){
this.setMenu(d)
},
}
},
}
Примечание: привязки
provideиinjectНЕ являются реактивными. Это сделано намеренно. Однако, если вы передаете наблюдаемый объект, свойства этого объекта остаются реактивными.
var ParenmtComponent = {
provide () {
const menu = {}
Object.defineProperty(menu, 'menuOptions', {
enumerable: true,
get: () => this.menuOptions,
})
return { menu }
},
data: () => ({ menuOptions: ['Home', 'About','Contact'] }),
}
var ChildComponent = {
inject: ['menu'],
template: `<ul id="example">
<li v-for="item in menu">
{{ item }}
</li>
</ul>`,
}
Инъекции доступны в props и data. Таким образом, вы можете установить введенные данные как prop значения по умолчанию или вы можете использовать инъекции в качестве начального значенияdata.
Подробнее о предоставлении / введении в официальной документации здесь.
Заинтересовавшись, вы можете прочитать наш предыдущий блог.
и два блога, опубликованные на этой неделе нашими фронтендерами.