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

Seřadit podle délky pole

Použijte agregační rámec s pomocí $size operátor od MongoDB 2.6 a vyšší:

db.collection.aggregate([
    // Project with an array length
    { "$project": {
        "title": 1,
        "author": 1,
        "votes": 1,
        "length": { "$size": "$votes" }
    }},

    // Sort on the "length"
    { "$sort": { "length": -1 } },

    // Project if you really want
    { "$project": {
        "title": 1,
        "author": 1,
        "votes": 1,
    }}
])

Dost jednoduché.

Pokud nemáte k dispozici verzi 2.6, můžete to udělat s trochou práce:

db.collection.aggregate([
    // unwind the array
    { "$unwind": "$votes" },

    // Group back
    { "$group": {
        "_id": "$id",
        "title": { "$first": "$title" },
        "author": { "$first": "$author" },
        "votes": { "$push": "$votes" },
        "length": { "$sum": 1 }
    }},

    // Sort again
    { "$sort": { "length": -1 } },

    // Project if you want to
    { "$project": {
        "title": 1,
        "author": 1,
        "votes": 1,
    }}
])

To je skoro vše.



  1. Chyba při vkládání dokumentu do MongoDB přes Node.js

  2. Mohu nakonfigurovat MongoDB tak, aby byl v paměti?

  3. Zabraňte Spring Data pro Mongo převést ID na ObjectId

  4. Mongodb vrací více výsledků dílčího pole a vylučuje ostatní vrácené výsledky