3 votes

Sélection des valeurs des objets dans un tableau imbriqué de documents dans CosmosDB

Imagine que nous avons une telle collection (exemple tiré de https://www.documentdb.com/sql/demo)

{
    "_id" : "19015",
    "description" : "Snacks, granola bars, hard, plain",
    "servings" : [ 
        {
            "amount" : 1,
            "description" : "bar",
            "weightInGrams" : 21
        }, 
        {
            "amount" : 1,
            "description" : "bar (1 oz)",
            "weightInGrams" : 28
        }, 
        {
            "amount" : 1,
            "description" : "bar",
            "weightInGrams" : 25
        }
    ]
}

Comment puis-je interroger CosmosDB dans l'API SQL pour obtenir des résultats comme ceux-ci ?

{
    "_id" : "19015",
    "servings" : [ 
        {
            "description" : "bar"
        }, 
        {
            "description" : "bar (1 oz)"
        }, 
        {
            "description" : "bar"
        }
    ]
}

avec MongoDB j'utiliserais une requête de ce genre

db.getCollection('food').find({id: '19015'}, {'servings.description' : 1})

J'ai essayé plusieurs scénarios avec des jointures, etc.

SELECT 
    food.id,
    food.servings.description
FROM food
WHERE food.id = "19015"

ou

SELECT 
    food.id,
    [{
        description: food.servings[0].description
    }] AS servings
FROM food
WHERE food.id = "19015"
  • au lieu de [0] j'ai essayé [] ou [$] mais cela ne fonctionne pas

Est-ce que quelqu'un a une idée de comment résoudre ce problème de manière simple ?

6voto

Samer Boshra Points 549

Vous pourriez utiliser l'expression ARRAY (sous-requête) pour y parvenir. Voici la requête :

SÉLECTIONNER
    nourriture.identifiant,
    ARRAY(SÉLECTIONNER portion.description DE servir DANS nourriture.portions) COMME portions
DEPUIS nourriture
OÙ nourriture.identifiant = "19015"

0voto

Jan Metzger Points 21

En exécutant cette requête : vous obtiendrez au moins le résultat suivant : {"id":19015, "description":"bar"} {"id":19015, "description":"bar (1 oz)"} {"id":19015, "description":"bar"} Peut-être pas exactement ce à quoi vous vous attendiez, mais peut-être quelque chose avec lequel vous pouvez travailler !

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X