MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Como obter dados do MongoDB para array simples usando Node.JS e Mongoose?


Você pode seguir a rota da estrutura de agregação, que tem a capacidade de nivelar os arrays por meio do $unwind operador. Isso gerará um novo registro para cada elemento do campo de dados da lista no qual o desenrolamento é aplicado. Basicamente, achata os dados.

Depois de nivelar os dados, você precisaria do $lookup operador para fazer um "join" nos products campo para os products coleção. Repita o processo para o esquema de frutas aninhadas.

Vamos ver um exemplo (não testado) para entender melhor
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);
})

ISENÇÃO DE RESPONSABILIDADE :O código acima é um código não testado que serve apenas como guia, fazendo algumas suposições de que você está executando o código em um ambiente de teste com as versões mais recentes do MongoDB e do mongoose que suportam o $lookup operador E que você pode executar a mesma consulta de agregação no shell do mongo.