Как можно запросить элемент в поле списка в DynamoDB, используя Python? - PullRequest
0 голосов
/ 14 июля 2020

У меня есть таблица, содержащая элемент со следующими атрибутами:

{
  "country": "USA",
  "names": [
    "josh",
    "freddy"
  ],
  "phoneNumber": "123",
  "userID": 0
}

Я пытаюсь запросить элемент в DynameDB, ища имя, используя python. Поэтому я бы написал в своем коде, что у нужного мне элемента в поле "names" есть "freddy".

Я видел много форумов, упоминающих "contains", но ни один из них не показывает пример ...

Мой текущий код следующий:

dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table('users_table')
data = table.query(
    FilterExpression: 'names = :name',
    ExpressionAttributeValues: {
      ":name": "freddy"
    }
)

Я, очевидно, не могу использовать его, потому что "names" - это список, а не строковое поле. Как найти "freddy" в names?

1 Ответ

1 голос
/ 14 июля 2020

Поскольку поле names не является частью первичного ключа, вы не можете использовать query. Единственный способ найти элемент по names - использовать scan.

import boto3
from boto3.dynamodb.conditions import Key, Attr

dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table('users_table')
data = table.scan(
    FilterExpression=Attr('names').contains('freddy')
)
...