sql >> Databasteknik >  >> NoSQL >> MongoDB

Hur får man data från MongoDB till enkel array med Node.JS och Mongoose?

Du kan gå vägen för aggregeringsramverket, som har kapacitet att platta till arrayerna genom $unwind operatör. Detta kommer att generera en ny post för varje element i listdatafältet som avveckling tillämpas på. Det plattar i princip ut data.

Efter att ha plattat ut data skulle du behöva $lookup operatör för att göra en "join" på products fältet till products samling. Upprepa processen för schemat för kapslade frukter.

Låt oss se ett exempel (otestat) för att förstå detta bättre

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

ANSVARSFRISKRIVNING :Ovanstående är oprövad kod som endast fungerar som vägledning genom att göra ett par antaganden om att du kör koden i en testmiljö med de senaste MongoDB- och mongoose-versionerna som stöder $lookup operator OCH att du kan utföra samma aggregeringsfråga i mongo shell.




  1. Hur man använder SCAN med alternativet MATCH i Predis

  2. Anslut till flera mongo db-värdar och autentisera med en annan databas i vårstart

  3. Hitta Distinkt inbäddat dokument och gör ytterligare distinkta med hjälp av Field

  4. Meteor kräver sudo för att köra