sql >> Database >  >> NoSQL >> MongoDB

Hoe retourneer ik alleen het eerste exemplaar van een ID met Mongoose?

Hiervoor kunnen we het aggregatieraamwerk gebruiken. Eerst moeten we $sort door user en "_id". Van daaruit gaan we dan $group door "gebruiker" en gebruik de $last accumulator-operator om het laatste document voor elke gebruiker te retourneren. Merk op dat we ook de $first kunnen gebruiken accumulator-operator als we onze documenten in aflopende volgorde sorteren, maar in oplopende volgorde sorteren en $last gebruiken onze bedoeling duidelijk maken.

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

die produceert:

{
    "_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"
    }
}

Mogelijk willen we een $project toevoegen aan onze pijplijn, maar dit zal leiden tot een daling van de prestaties. Het vermindert echter zowel de hoeveelheid gegevens die over de draad worden verzonden als de tijd en het geheugen die worden gebruikt om documenten aan de clientzijde te decoderen als niet alle sleutel/waarde-paren in een document moeten worden geretourneerd.

Het $project podium ziet er als volgt uit:

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


  1. Android Studio:verbinding maken met MongoDB-server met Mongo Java Driver

  2. Hoe Redis implementeren in CodeIgniter?

  3. PooledRedisClientManager geeft geen verbindingen vrij

  4. Redis hash paginering