본문으로 건너뛰기

Query API 레퍼런스

Query / AsyncQuery

client.query(namespace, set_name) 로 생성. where() 로 predicate, select() 로 bin 선택 후 results() 또는 foreach() 로 실행.

from aerospike_py import predicates

query = client.query("test", "demo")
query.select("name", "age")
query.where(predicates.between("age", 20, 30))
records = query.results() # 또는: await query.results()

select(*bins)

반환할 특정 bin 선택.

where(predicate)

predicate filter 설정. bin 에 secondary index 가 필요.

results(policy=None) -> list[Record]

실행하고 매칭되는 모든 record 반환.

foreach(callback, policy=None)

실행하고 각 결과에 대해 callback(record) 호출. 조기 종료 위해 False 반환.

def process(record: Record) -> None:
print(record.bins)

query.foreach(process)

Predicate

from aerospike_py import predicates
Function설명Example
equals(bin, val)equalityequals("name", "Alice")
between(bin, min, max)범위 (inclusive)between("age", 20, 30)
contains(bin, idx_type, val)list/map containscontains("tags", INDEX_TYPE_LIST, "py")
geo_within_geojson_region(bin, geojson)영역 안의 point아래 참조
geo_within_radius(bin, lat, lng, radius)circle 안의 point (m)아래 참조
geo_contains_geojson_point(bin, geojson)point 를 포함하는 region아래 참조

Geospatial

# polygon 안의 point
region = '{"type":"Polygon","coordinates":[[[126.9,37.5],[126.9,37.6],[127.0,37.6],[127.0,37.5],[126.9,37.5]]]}'
query.where(predicates.geo_within_geojson_region("location", region))

# 반경 안의 point
query.where(predicates.geo_within_radius("location", 37.5665, 126.978, 5000.0))

# point 를 포함하는 region
point = '{"type":"Point","coordinates":[126.978, 37.5665]}'
query.where(predicates.geo_contains_geojson_point("coverage", point))

전체 예제

import aerospike_py as aerospike
from aerospike_py import predicates, Record

client = aerospike.client({"hosts": [("127.0.0.1", 3000)]}).connect()

# 데이터 insert
for i in range(100):
client.put(("test", "users", f"user_{i}"), {
"name": f"User {i}",
"age": 20 + (i % 40),
})

# index 생성
client.index_integer_create("test", "users", "age", "users_age_idx")

# Query
query = client.query("test", "users")
query.select("name", "age")
query.where(predicates.between("age", 25, 35))
records: list[Record] = query.results()

for record in records:
print(f"{record.bins['name']}: age {record.bins['age']}")

# 정리
client.index_remove("test", "users_age_idx")
client.close()