sql >> Database teknologi >  >> NoSQL >> MongoDB

Hvordan får man data fra MongoDB til simpelt array ved hjælp af Node.JS og Mongoose?

Du kunne gå aggregationsrammeruten, som har kapaciteten til at udjævne arrays gennem $unwind operatør. Dette vil generere en ny post for hvert eneste element i listedatafeltet, som afvikling anvendes på. Det flader grundlæggende dataene ud.

Efter at have udjævnet dataene vil du kræve $lookup operatør for at lave et "join" på products feltet til products kollektion. Gentag processen for det indlejrede frugtskema.

Lad os se et eksempel (utestet) for at forstå dette bedre

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);
})

ANSVARSFRASKRIVELSE :Ovenstående er utestet kode, som kun tjener som en vejledning ved at gøre et par antagelser om, at du kører koden i et testmiljø med de seneste MongoDB- og mongoose-versioner, der understøtter $lookup operator OG at du kan udføre den samme aggregeringsforespørgsel i mongo shell.




  1. MongoDB opdaterer flere underdokumenter med eller forespørg

  2. redis slave vil ikke synkronisere med master

  3. Skæv læsebelastning på Mongo Replica Set

  4. Returner kun specifikke felter for en forespørgsel i Spring Data MongoDB