sql >> Databáze >  >> NoSQL >> MongoDB

Jak dostat data z MongoDB do jednoduchého pole pomocí Node.JS a Mongoose?

Můžete jít cestou agregačního rámce, který má kapacitu zploštit pole prostřednictvím $unwind operátor. Tím se vygeneruje nový záznam pro každý prvek datového pole seznamu, na který je aplikováno uvolnění. V podstatě zplošťuje data.

Po zploštění dat budete potřebovat $lookup operátora k provedení "připojení" k products do pole products sbírka. Opakujte proces pro schéma vnořených plodů.

Podívejme se na příklad (nevyzkoušeno), abychom to lépe pochopili

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

ODPOVĚDNOST :Výše ​​uvedený kód je netestovaný, který slouží pouze jako vodítko, protože předpokládá, že kód spouštíte v testovacím prostředí s nejnovějšími verzemi MongoDB a mongoose, které podporují $lookup operátor AND že můžete provést stejný agregační dotaz v mongo shell.




  1. příklady ovladačů mongodb-erlang Erlang

  2. Připojte laravel jenssegers k mongodb atlas clusteru

  3. Mohu použít Tornado+ Celery+ RabbitMQ + Redis?

  4. Jak zjistit délku pole mongodb