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

Odstraňte vnořený dokument s podmínkou v MongoDB

Problém je v tom, že pole vnořených dokumentů není kolekce, nemůžete na něm třídit ani dělat něco jiného. Ale pokud máte přístup k jakémukoli jazykovému rozhraní, jako je JavaScript nebo jinde, je to možné. Stačí rozbalit seznam vnořených dokumentů, seřadit je podle výšky, zapamatovat si první a poté spustit příkaz k vytažení z pole na základě jeho názvu a výšky. Lze to provést například pomocí tohoto kódu JavaScript přímo v MongoDB shell:

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

Mám podezření, že řešení není nejelegantnější, ale každopádně funguje.




  1. MongoDB Java Driver:MongoCore Driver vs. MongoDB Driver vs. MongoDB Async Driver

  2. Používám příslib node.js pro ověření, zda uživatelské jméno existuje v db nebo ne

  3. Jak nastavit Play!2.5 s ReactiveMongo

  4. Morphia List<Map<String,Object>>> return Embedded element není DBObject při operaci hledání