MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Comment obtenir des données de MongoDB vers un tableau simple en utilisant Node.JS et Mongoose ?

Vous pouvez suivre la route du cadre d'agrégation, qui a la capacité d'aplatir les tableaux via le $unwind opérateur. Cela générera un nouvel enregistrement pour chaque élément du champ de données de liste sur lequel le déroulement est appliqué. Il aplatit essentiellement les données.

Après avoir aplati les données, vous auriez besoin du $lookup opérateur pour faire un "join" sur les products champ aux products le recueil. Répétez le processus pour le schéma de fruits imbriqués.

Voyons un exemple (non testé) pour mieux comprendre cela

var Schema = require('../model/schema');
Schema.Shop.aggregate([
    { "$unwind": "$products" },
    {
        "$lookup": {
            "from": "products",
            "localField": "products",
            "foreignField": "_id",
            "as": "product"
        }
    },
    { "$unwind": "$product" },
    { "$unwind": "$product.fruits" },
    {
        "$lookup": {
            "from": "fruits",
            "localField": "product.fruits",
            "foreignField": "_id",
            "as": "fruits"
        }
    },  
    {
        "$project": {
            "nameShop": 1,
            "nameProduct": "$product.nameProduct",
            "nameFruit": "$fruits.nameFruit",
            "price": "$fruits.price",
        }
    }
]).exec(function (err, result){
    if (err) throw err;
    console.log(result);
})

AVIS DE NON-RESPONSABILITÉ  : ce qui précède est un code non testé qui ne sert que de guide en faisant quelques hypothèses selon lesquelles vous exécutez le code dans un environnement de test avec les dernières versions de MongoDB et de mongoose qui prennent en charge $lookup opérateur ET que vous pouvez effectuer la même requête d'agrégation dans mongo shell.