sql >> Databasteknik >  >> NoSQL >> MongoDB

mongodb aggregeringsramverk - Hämta första dokumentets fält för den kapslade arrayen

Det enklaste sättet att uppnå ditt resultat är att använda en normal sökfråga och $slice operatör:

db.collection.find( {_id: "User1"}, {"likes.sublikes": {$slice: 1}} )

Aggregeringsramverket (som vid MongoDB 2.4.1) stöder inte $slice eller arrayindex (förfrågningar om röst-/bevakningsfunktioner:SERVER-6074 och SERVER-4589 ).

Du kan göra detta i aggregeringsramverket med $unwind , $group och $first operatör, t.ex.:

db.collection.aggregate([
    { $match: {
         _id : "User1"
    }},
    { $unwind: "$likes.sublikes" },
    { $group: {
        _id: "$_id",
        like: { $first: "$likes.sublikes" }
    }},
    { $project: {
        _id: 0,
        "UserID": "$_id",
        "WebsiteName": "$like.WebsiteName"
    }}
])

Den normala $slice bör vara det mest effektiva alternativet.




  1. Söksträng med specialtecken i MongoDB-dokument

  2. MongoDB:Tvinga datatyp av fält?

  3. mongodb-autentisering med anslutningssträng

  4. Är det möjligt att implementera Multi-Version Concurrency Control (MVCC) ovanpå MongoDB?