sql >> Base de Datos >  >> NoSQL >> MongoDB

¿Cómo obtener datos de MongoDB en una matriz simple usando Node.JS y Mongoose?

Puede seguir la ruta del marco de agregación, que tiene la capacidad de aplanar las matrices a través de $unwind operador. Esto generará un nuevo registro para todos y cada uno de los elementos del campo de datos de la lista sobre los que se aplica el desenredado. Básicamente aplana los datos.

Después de aplanar los datos, necesitaría $lookup operador para hacer una "unión" en los products campo a los products recopilación. Repita el proceso para el esquema de frutas anidadas.

Veamos un ejemplo (no probado) para entender esto mejor

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

DESCARGO DE RESPONSABILIDAD :Lo anterior es un código no probado que solo sirve como guía al hacer un par de suposiciones de que está ejecutando el código en un entorno de prueba con las últimas versiones de MongoDB y mongoose que admiten $lookup operador Y que puede realizar la misma consulta de agregación en mongo Shell.