sql >> Database >  >> NoSQL >> MongoDB

Hoe gegevens van MongoDB naar een eenvoudige array te krijgen met Node.JS en Mongoose?

Je zou de aggregatieraamwerkroute kunnen volgen, die de capaciteit heeft om de arrays af te vlakken via de $unwind exploitant. Dit genereert een nieuw record voor elk element van het lijstgegevensveld waarop afwikkelen wordt toegepast. Het vlakt in feite de gegevens af.

Na het afvlakken van de gegevens heeft u de $lookup operator om een ​​"join" te doen op de products veld naar de products verzameling. Herhaal het proces voor het schema voor geneste vruchten.

Laten we een voorbeeld bekijken (niet getest) om dit beter te begrijpen

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

DISCLAIMER :Het bovenstaande is niet-geteste code die alleen als richtlijn dient door een aantal aannames te doen dat u de code uitvoert in een testomgeving met de nieuwste MongoDB- en mangoestversies die de $lookup operator AND dat u dezelfde aggregatiequery kunt uitvoeren in mongo-shell.




  1. java.lang.NoClassDefFoundError bij gebruik van MongoDB-stuurprogramma

  2. mongodb-gegevensmapmachtigingen

  3. Omgaan met trage zoekopdrachten in MongoDB

  4. $ slice-operator gebruiken om het laatste element van de array te krijgen