View a markdown version of this page

$expr - Amazon DocumentDB

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

$expr

Nouveau depuis la version 4.0.

Non pris en charge par Elastic Cluster.

L'$expropérateur d'Amazon DocumentDB vous permet d'utiliser des expressions d'agrégation dans le langage de requête. Il vous permet d'effectuer des comparaisons et des calculs complexes sur des champs d'un document, de la même manière que vous utiliseriez les étapes du pipeline d'agrégation.

Les opérateurs $eq$lt,$lte,$gt, et de $gte comparaison placés dans un $expr opérateur peuvent utiliser un index, y compris un index sur la from collection référencée dans une $lookup étape.

Limites

  • Les index ne peuvent être utilisés que pour des comparaisons entre des champs et des constantes. L'opérande doit donc être résolu en une constante. Par exemple, une comparaison entre $a et une valeur constante peut utiliser un indice, mais $b pas une comparaison entre $a et.

  • Les index multiclés, partiels ou épars ne sont pas utilisés. Dans ces cas, la requête revient à une analyse de collection.

  • Lorsque l'letopérande se résout en une valeur vide ou manquante, la comparaison ne peut pas utiliser de recherche d'index ciblée. Dans ce cas, Amazon DocumentDB effectue une analyse complète de l'index.

Paramètres

  • expression: expression qui renvoie une valeur booléenne, vous permettant d'effectuer des comparaisons et des calculs sur les champs du document.

Exemple (MongoDB Shell)

L'exemple suivant montre comment utiliser l'$expropérateur pour rechercher tous les documents dont le manufacturingCost champ est supérieur au price champ.

Créez des exemples de documents

db.inventory.insertMany([ { item: "abc", manufacturingCost: 500, price: 100 }, { item: "def", manufacturingCost: 300, price: 450 }, { item: "ghi", manufacturingCost: 400, price: 120 } ]);

Exemple de requête

db.inventory.find({ $expr: { $gt: ["$manufacturingCost", "$price"] } })

Sortie

{ "_id" : ObjectId("60b9d4d68d2cac581bc5a89a"), "item" : "abc", "manufacturingCost" : 500, "price" : 100 }, { "_id" : ObjectId("60b9d4d68d2cac581bc5a89c"), "item" : "ghi", "manufacturingCost" : 400, "price" : 120 }

Exemples de code

Pour afficher un exemple de code d'utilisation de la $expr commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

Node.js
const { MongoClient } = require('mongodb'); async function example() { const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false'); const db = client.db('test'); const collection = db.collection('inventory'); const result = await collection.find({ $expr: { $gt: ['$manufacturingCost', '$price'] } }).toArray(); console.log(result); await client.close(); } example();
Python
from pymongo import MongoClient def example(): client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false') db = client['test'] collection = db['inventory'] result = list(collection.find({ '$expr': { '$gt': ['$manufacturingCost', '$price'] } })) print(result) client.close() example()