MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Условно оценяване на елемент от масив за връщане

Ето един пример с използване на Aggregation Framework в MongoDB 2.4.9, който според мен постига резултата, който търсите:

db.books.aggregate(

    // Unwind the refs array
    { $unwind: "$refs" },

    // Sort by refs.default descending so "true" values will be first, nulls last
    { $sort: {
        "refs.default" : -1
    }},

    // Group and take the first ref; should either be "default:true" or first element
    { $group: {
        _id: "$_id",
        name: { $addToSet: "$name" },
        refs: { $first: "$refs" }
    }},

    // (optional) Sort by name to match the example output
    { $sort: {
        name: 1,
    }},

    // (optional) Clean up output
    { $project: {
        _id: 0,
        name: 1,
        refs: 1
    }}
)

Примерен резултат:

{
    "result" : [
        {
            "name" : [
                "Book1"
            ],
            "refs" : {
                "oid" : "object5",
                "default" : true
            }
        },
        {
            "name" : [
                "Book2"
            ],
            "refs" : {
                "oid" : "object5",
                "default" : true
            }
        },
        {
            "name" : [
                "Book3"
            ],
            "refs" : {
                "oid" : "object4"
            }
        },
        {
            "name" : [
                "Book4"
            ],
            "refs" : {
                "oid" : "object4",
                "default" : true
            }
        }
    ],
    "ok" : 1
}

Бележки:

  • Това прави предположение за поведението на реда на сортиране за refs където "default:true" липсва. При кратко тестване първоначалният ред изглежда е запазен, така че "първият" елемент от масива е както се очаква.

  • Поради използваните оператори за агрегиране, изходът name е масив от един елемент и refs става вграден обект. Вместо да манипулирате допълнително в рамката за агрегиране, можете просто да посочите правилните полета в кода на вашето приложение.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Раждане на параметър mongodb

  2. Има ли начин да поставите цялата нулева стойност в края при сортиране с mongodb/mongoid?

  3. Използва се като графична база данни за намиране на приятели на приятели в MongoDb

  4. Преобразувайте MongoCursor от ->find() в масив

  5. Може ли MongoDB да съхранява и манипулира низове от UTF-8 с кодови точки извън основната многоезична равнина?