sql >> Databasteknik >  >> NoSQL >> MongoDB

Ta bort kapslade dokument med villkor i MongoDB

Problemet är att samlingen av underdokument inte är en samling, du kan inte sortera eller göra något annat på den. Men om du har tillgång till något språkgränssnitt som JavaScript eller så är det möjligt. Du behöver bara extrahera en lista över underdokument, sortera dem efter höjd, komma ihåg det första och sedan köra kommandot för att hämta det från arrayen baserat på dess namn och höjd. Det kan till exempel göras med den här JavaScript-koden direkt i MongoDB skal:

var min = 0; var name = "";
db.animals.find({ query:{"_id" : 0} }).forEach(
function(record){
    var sets = record.pets; 
    min = sets[0].height;
    sets.forEach(function(set){
        if(set.height <= min) 
            {min=set.height;
            name=set.name;}
            });
    print(min);
    print(name);    
    query = {"_id": 0}
    update = { "$pull" : { "pets" : { "name" : name } } };
    db.animals.update(query, update);
    })

Jag misstänker att lösningen inte är den mest eleganta men ändå fungerar den.




  1. skapa mongodb-dokument med underdokument atomärt?

  2. MongoDB-fråga för dokument äldre än 30 sekunder

  3. Mongo användardefinierade funktioner och kartförminskning

  4. MongoDB och Docker via docker-compose auth-fel och initierar inte db