Condividi tramite


find

Il find comando in Azure DocumentDB viene usato per eseguire query sui documenti all'interno di una raccolta. Questo comando è fondamentale per le operazioni di recupero dei dati e può essere personalizzato con filtri, proiezioni e opzioni di query per ottimizzare i risultati.

Sintassi

La sintassi di base per il find comando è:

db.collection.find(query, projection, options)

Parametri

Parametro Description
query Documento che specifica i criteri per i documenti da recuperare
projection (Facoltativo) Documento che specifica i campi nei documenti corrispondenti da restituire nel set di risultati
options (Facoltativo) Documento che specifica le opzioni per il comportamento e i risultati delle query

Esempio(i)

Si consideri questo documento di esempio della raccolta stores nel database StoreData.

{
    "_id": "0fcc0bf0-ed18-4ab8-b558-9848e18058f4",
    "name": "First Up Consultants | Beverage Shop - Satterfieldmouth",
    "location": {
        "lat": -89.2384,
        "lon": -46.4012
    },
    "staff": {
        "totalStaff": {
            "fullTime": 8,
            "partTime": 20
        }
    },
    "sales": {
        "totalSales": 75670,
        "salesByCategory": [
            {
                "categoryName": "Wine Accessories",
                "totalSales": 34440
            },
            {
                "categoryName": "Bitters",
                "totalSales": 39496
            },
            {
                "categoryName": "Rum",
                "totalSales": 1734
            }
        ]
    },
    "promotionEvents": [
        {
            "eventName": "Unbeatable Bargain Bash",
            "promotionalDates": {
                "startDate": {
                    "Year": 2024,
                    "Month": 6,
                    "Day": 23
                },
                "endDate": {
                    "Year": 2024,
                    "Month": 7,
                    "Day": 2
                }
            },
            "discounts": [
                {
                    "categoryName": "Whiskey",
                    "discountPercentage": 7
                },
                {
                    "categoryName": "Bitters",
                    "discountPercentage": 15
                },
                {
                    "categoryName": "Brandy",
                    "discountPercentage": 8
                },
                {
                    "categoryName": "Sports Drinks",
                    "discountPercentage": 22
                },
                {
                    "categoryName": "Vodka",
                    "discountPercentage": 19
                }
            ]
        },
        {
            "eventName": "Steal of a Deal Days",
            "promotionalDates": {
                "startDate": {
                    "Year": 2024,
                    "Month": 9,
                    "Day": 21
                },
                "endDate": {
                    "Year": 2024,
                    "Month": 9,
                    "Day": 29
                }
            },
            "discounts": [
                {
                    "categoryName": "Organic Wine",
                    "discountPercentage": 19
                },
                {
                    "categoryName": "White Wine",
                    "discountPercentage": 20
                },
                {
                    "categoryName": "Sparkling Wine",
                    "discountPercentage": 19
                },
                {
                    "categoryName": "Whiskey",
                    "discountPercentage": 17
                },
                {
                    "categoryName": "Vodka",
                    "discountPercentage": 23
                }
            ]
        }
    ]
}

Esempio 1: Recuperare tutti i documenti

Il comando find() senza filtri di query restituisce tutti i documenti nella raccolta.

db.stores.find()

Esempio 2: Recuperare documenti con filtri di query

Recuperare i documenti usando un filtro sulla proprietà name.

db.stores.find({"name": "Fourth Coffee | Stationery Haven - New Franco"})

Esempio 3: Recuperare documenti con filtri di query sugli oggetti

Recuperare documenti usando filtri di query sui campi lat e lon all'interno dell'oggetto location.

db.stores.find({"location.lat": 13.5236, "location.lon": -82.5707})

Quando la notazione punto (.) non viene usata per fare riferimento ai campi all'interno di un oggetto, il filtro di query deve corrispondere esattamente all'intero oggetto, incluso l'ordine dei campi.

db.stores.find({"location": {"lat": 13.5236, "lon": -82.5707}})

Esempio 4: Recuperare documenti con filtri di query su matrici

Recuperare i documenti dalla matrice promotionEvents in cui eventName è "Grand Bargain Gala".

db.stores.find({"promotionEvents.eventName": "Grand Bargain Gala"})

Recuperare i documenti dalla matrice "sconti", annidata all'interno della matrice promotionEvents in cui categoryName è "Area Rugs".

db.stores.find({"promotionEvents.discounts.categoryName": "Area Rugs"})

Proiezioni

Il secondo documento nel comando find specifica l'elenco di campi da proiettare nella risposta.

Includere un campo specifico o più campi nella risposta

Un valore intero diverso da zero o un valore booleano true include il campo nella risposta.

db.stores.find({"name": "Fourth Coffee | Stationery Haven - New Franco"}, {"location": 1, "sales": 1})
db.stores.find({"name": "Fourth Coffee | Stationery Haven - New Franco"}, {"location": true, "sales": true})
db.stores.find({"name": "Fourth Coffee | Stationery Haven - New Franco"}, {"location": 1, "sales": true})
db.stores.find({"name": "Fourth Coffee | Stationery Haven - New Franco"}, {"location": 1, "sales": -5})

Tutte e quattro le query sono equivalenti e specificano l'inclusione dei campi "location" e "sales" nella risposta del server.

{
    "_id": "b5c9f932-4efa-49fd-86ba-b35624d80d95",
    "location": {
        "lat": 13.5236,
        "lon": -82.5707
    },
    "sales": {
        "totalSales": 35346,
        "salesByCategory": [
            {
                "categoryName": "Rulers",
                "totalSales": 35346
            }
        ]
    }
}

Escludere un campo specifico o più campi nella risposta

Un valore intero pari a zero o un valore booleano false esclude il campo specificato dalla risposta della query.

db.stores.find({"name": "Fourth Coffee | Stationery Haven - New Franco"}, {"promotionEvents": 0, "location": 0, "sales": 0})
db.stores.find({"name": "Fourth Coffee | Stationery Haven - New Franco"}, {"promotionEvents": false, "location": false, "sales": false})

Entrambe le query sono equivalenti e restituiscono la risposta seguente:

{
    "_id": "b5c9f932-4efa-49fd-86ba-b35624d80d95",
    "name": "Fourth Coffee | Stationery Haven - New Franco",
    "staff": {
        "totalStaff": {
            "fullTime": 17,
            "partTime": 5
        }
    }
}

Annotazioni

Per impostazione predefinita, il campo _id è incluso nella risposta del server. Il documento di proiezione non può contenere clausole di inclusione ed esclusione. Tuttavia, il campo _id è l'unica eccezione a questa regola e può essere escluso insieme a un elenco di campi da includere e viceversa.

Proiettare il primo elemento in una matrice che corrisponde ai criteri di filtro delle query

Il comando "arrayFieldName".$ proietta solo la prima occorrenza di un oggetto in una matrice che corrisponde ai filtri di query specificati.

db.stores.find({"promotionEvents.eventName": "Grand Bargain Gala"}, {"promotionEvents.$": true})

Uno dei documenti restituiti mostra solo il primo elemento nella matrice promotionEvents con il nome dell'evento "Grand Bargain Gala", escludendo tutti gli altri elementi nella matrice.

{
    "_id": "d7fe6fb9-57e8-471a-b8d2-714e3579a415",
    "promotionEvents": [
        {
            "eventName": "Grand Bargain Gala",
            "promotionalDates": {
                "startDate": {
                    "Year": 2024,
                    "Month": 3,
                    "Day": 25
                },
                "endDate": {
                    "Year": 2024,
                    "Month": 4,
                    "Day": 1
                }
            },
            "discounts": [
                {
                    "categoryName": "Area Rugs",
                    "discountPercentage": 7
                },
                {
                    "categoryName": "Vinyl Flooring",
                    "discountPercentage": 12
                }
            ]
        }
    ]
}

Proiettare elementi specifici in una matrice che corrispondono ai criteri di filtro delle query

Questa query proietta la proprietà eventName e la proprietà Year annidata all'interno della matrice promotionEvents.

db.stores.find({"promotionEvents.eventName": "Grand Bargain Gala"}, {"promotionEvents.eventName": true, "promotionEvents.promotionalDates.startDate.Year": true})

Uno dei documenti restituiti mostra gli elementi della matrice specificati proiettati nella risposta.

{
    "_id": "d7fe6fb9-57e8-471a-b8d2-714e3579a415",
    "promotionEvents": [
        {
            "eventName": "Grand Bargain Gala",
            "promotionalDates": {
                "startDate": {
                    "Year": 2024
                }
            }
        },
        {
            "eventName": "Grand Bargain Bash",
            "promotionalDates": {
                "startDate": {
                    "Year": 2024
                }
            }
        },
        {
            "eventName": "Epic Bargain Bash",
            "promotionalDates": {
                "startDate": {
                    "Year": 2024
                }
            }
        }
    ]
}