sql >> Database >  >> NoSQL >> MongoDB

Hoe mongodb-queryresultaten te sorteren op basis van subdocumenten

U kunt cursor.sort() . gebruiken om op meerdere velden (eigenlijk een combo) tegelijk te sorteren, maar ik denk niet dat het werkt als u tegelijkertijd op zowel een document als een subdocumentveld sorteert. Als u op twee verschillende velden van het bovenste document zou sorteren of op twee verschillende velden van een subdocument, dan zou het goed zijn, denk ik.

U kunt dus een vergelijkbare uitvoer krijgen met behulp van de aggregatie kader. Het enige dat u hoeft te doen, is in feite de arrays van de subs afbreken veld en vervolgens sorteren hen.

Je zou iets kunnen doen als:

db.col.aggregate({$unwind:'subs'}, {$sort:{id:1,'subs.time':1}});

Met de bovenstaande code zou je een uitvoer moeten krijgen die lijkt op deze:

 { 
    id: 1, 
    type: 'strs', 
    subs: 
        { time: 1, val: 'ab' }
},{ 
    id: 1, 
    type: 'strs', 
    subs: 
        { time: 20, val: 'cs' }
},{ 
    id: 1, 
    type: 'strs', 
    subs: 
        { time: 50, val: 'be' }
},{ 
    id: 2, 
    type: 'newname', 
    subs: 
        { time: 12, val: 'a' }
},{ 
    id: 2, 
    type: 'newname', 
    subs: 
        { time: 20, val: 'b' }
},{ 
    id: 2, 
    type: 'newname', 
    subs: 
        { time: 30, val: 'c' }
}


  1. Maak een wildcard-tekstindex in MongoDB

  2. Verbinding maken met MongoDB Atlas met behulp van Golang mgo:aanhoudend geen bereikbare server naar replicaset

  3. Mongodb update diep genest subdocument

  4. kan pymongo ubuntu niet importeren