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

Vyberte poslední hodnotu pole v dílčím dokumentu

K tomu potřebujete agregační rámec, myslím, že byste opravdu měli změnit strukturu, ale pracujte s tím, co máte:

Model.aggregate(
    [
       { "$match": { "prices.100": { "$exists": true } }},
       { "$unwind": "$prices.100" },
       { "$group": {
          "_id": "$_id",
          "price": { "$last": "$prices.100" }
       }},
       { "$project": { "_id": 0, "prices.100": "$price" } }
     ]
) 

V budoucích verzích budete moci používat pouze nový $slice operátor:

Model.aggregate(
    [
        { "$match": { "prices.100": { "$exists": true } } },
        { "$project": {
            "_id": 0,
            "prices.100": { "$slice": ["$prices.100",-1] }
        }}
    ]
)

Ve skutečnosti můžete dělat „obě“ pole současně:

Model.aggregate(
    [
        { "$match": { "prices.100": { "$exists": true } } },
        { "$project": {
            "_id": 0,
            "prices.100": { "$slice": ["$prices.100",-1] },
            "prices.101": { "$slice": ["$prices.100",-1] }
        }}
    ]
)

A to je mnohem lepší než zpracování pomocí $unwind a $last získat poslední prvek pole, když $group se použije k získání dat zpět.

V zásadě má stejný výkon jako běžný dotaz v novější podobě. V současné podobě to bude pomalejší.



  1. Seznam MongoDB Filtr sbírek

  2. Je možné definovat klíč při vkládání do mongodb

  3. Jak mohu procházet/zobrazovat hodnoty uložené v Redis

  4. MongoDB vám pomůže s doporučeními