MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Wie bekomme ich mit Node.JS und Mongoose Daten von MongoDB in ein einfaches Array?

Sie könnten die Aggregation-Framework-Route wählen, die die Fähigkeit hat, die Arrays durch $unwind Operator. Dadurch wird ein neuer Datensatz für jedes einzelne Element des Listendatenfelds generiert, auf das die Abwicklung angewendet wird. Es glättet im Grunde die Daten.

Nach dem Reduzieren der Daten benötigen Sie den $lookup Operator, um einen "Join" für die products durchzuführen Feld zu den products Sammlung. Wiederholen Sie den Vorgang für das verschachtelte Fruchtschema.

Sehen wir uns ein Beispiel (ungetestet) an, um dies besser zu verstehen

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

HAFTUNGSAUSSCHLUSS :Der obige Code ist ungetestet und dient nur als Richtlinie, da einige Annahmen getroffen werden, dass Sie den Code in einer Testumgebung mit den neuesten MongoDB- und Mongoose-Versionen ausführen, die den $lookup Operator UND dass Sie dieselbe Aggregationsabfrage in der Mongo-Shell ausführen können.