Para agentes de IA: um índice de documentação está disponível em https://www.mongodb.com/pt-br/docs/llms.txt — as versões de markdown de todas as páginas estão disponíveis anexando .md a qualquer caminho de URL.

Exemplos de esquema

Este guia mostra exemplos de como usar esquemas PyMongoArrow em situações comuns.

Ao executar operações agregadas ou de localização, você pode fornecer um esquema para dados aninhados utilizando o objeto struct . Pode haver nomes conflitantes em subdocumentos em comparação com seus documentos principais.

>>> from pymongo import MongoClient... from pymongoarrow.api import Schema, find_arrow_all... from pyarrow import struct, field, int32... coll = MongoClient().db.coll... coll.insert_many(... [... {"start": "string", "prop": {"name": "foo", "start": 0}},... {"start": "string", "prop": {"name": "bar", "start": 10}},... ]... )... arrow_table = find_arrow_all(... coll, {}, schema=Schema({"start": str, "prop": struct([field("start", int32())])})... )... print(arrow_table)pyarrow.Tablestart: stringprop: struct<start: int32> child 0, start: int32----start: [["string","string"]]prop: [ -- is_valid: all not null -- child 0 type: int32[0,10]]

Você pode fazer a mesma coisa ao usar Pandas e NumPy:

>>> df = find_pandas_all(... coll, {}, schema=Schema({"start": str, "prop": struct([field("start", int32())])})... )... print(df) start prop0 string {'start': 0}1 string {'start': 10}

Você também pode usar projeção para nivelar os dados antes de passá-los para o PyMongoArrow. O exemplo a seguir ilustra como fazer isso usando uma estrutura de documento aninhada muito simples:

>>> df = find_pandas_all(... coll,... {... "prop.start": {... "$gte": 0,... "$lte": 10,... }... },... projection={"propName": "$prop.name", "propStart": "$prop.start"},... schema=Schema({"_id": ObjectIdType(), "propStart": int, "propName": str}),... )... print(df) _id propStart propName0 b'c\xec2\x98R(\xc9\x1e@#\xcc\xbb' 0 foo1 b'c\xec2\x98R(\xc9\x1e@#\xcc\xbc' 10 bar

Ao executar uma operação agregada, você pode nivelar os campos usando o estágio $project , como mostrado no seguinte exemplo:

>>> df = aggregate_pandas_all(... coll,... pipeline=[... {"$match": {"prop.start": {"$gte": 0, "$lte": 10}}},... {... "$project": {... "propStart": "$prop.start",... "propName": "$prop.name",... }... },... ],... )