MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Warunkowo oceń element tablicy do zwrócenia

Oto przykład użycia agregacji Framework w MongoDB 2.4.9, który moim zdaniem osiąga pożądany rezultat:

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

Przykładowy wynik:

{
    "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
}

Uwagi:

  • To zakłada założenie dotyczące zachowania porządku sortowania dla refs gdzie brakuje "default:true". Podczas krótkich testów wydaje się, że pierwotna kolejność została zachowana, więc „pierwszy” element tablicy jest zgodny z oczekiwaniami.

  • Ze względu na użyte operatory agregacji wynik name jest tablicą jednoelementową, a refs staje się obiektem osadzonym. Zamiast dalej manipulować w ramach agregacji, możesz po prostu odwołać się do właściwych pól w kodzie aplikacji.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB:Jak używać jednego schematu jako dokumentu podrzędnego dla różnych kolekcji zdefiniowanych w różnych plikach

  2. Dodaj dane do dokumentów w Mongo DB za pomocą PHP

  3. mongodb i max połączenia

  4. MongoDB:Używanie dopasowania ze zmiennymi dokumentu wejściowego

  5. mongodb c# jak pracować z dokumentem BSON