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

Jak vrátit pouze první výskyt ID s Mongoose?

K tomu můžeme použít agregační rámec. Nejprve musíme $sort od user a "_id". Odtud pak $group uživatelem a použijte $last provozovatel akumulátoru vrátit poslední doklad pro každého uživatele. Všimněte si, že můžeme také použít $first operátor akumulátoru, pokud naše dokumenty řadíme sestupně, ale třídíme vzestupně a pomocí $last vyjasnit náš záměr.

db.collection.aggregate([
    { "$sort": { "user": 1, "_id": -1 } }, 
    { "$group": { 
        "_id": "$user", 
        "user": { "$last": "$$ROOT" } 
    }} 
])

který produkuje:

{
    "_id" : "fje93jrg4",
    "user" : {
        "_id" : 2,
        "user" : "fje93jrg4",
        "event" : null,
        "group" : null,
        "name" : "Bob",
        "text" : "Testing"
    }
}
{
    "_id" : "94fg844f",
    "user" : {
        "_id" : 1,
        "user" : "94fg844f",
        "event" : null,
        "group" : null,
        "name" : "Jake",
        "text" : "Hello world"
    }
}
{
    "_id" : null,
    "user" : {
        "_id" : 4,
        "user" : null,
        "event" : "d0j3n9fn3",
        "group" : null,
        "name" : "My Event",
        "text" : "Testing 2"
    }
}

Možná budeme chtít přidat $project do našeho potrubí, ale způsobí to pokles výkonu. Sníží se však jak množství dat zasílaných po drátě, tak čas a paměť použitá k dekódování dokumentů na straně klienta, pokud nepotřebujete vrátit všechny páry klíč/hodnota v dokumentu.

$project fáze vypadá takto:

{ "$project": {
    "_id": "$user._id",
    "user": "$user.user",
    "event": "$user.event",
    "group": "$user.group",
    "name": "$user.name",
    "text": "$user.text"
}}


  1. Jak hledat klíčový vzor v redis hash?

  2. Operátor MongoDB $

  3. Vložte mnoho dokumentu do kolekce MongoDB pomocí C# BsonArray

  4. Chyba zobrazení v php