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

MongoDB- Pobieranie dokładnego elementu tablicy, z wyłączeniem innych

Jest to standardowe i zrozumiałe nieporozumienie dotyczące tablicy tablic w MongoDB. Kryteria zapytania dadzą prawidłowy wynik w zakresie dokumentu , niekoniecznie tylko elementy w tablicy, której szukasz. Innymi słowy, biorąc pod uwagę pożądany cel znalezienia DATA NOT FOUND , większość prostych zapytań znajdzie dowolny dokument, w którym przynajmniej jeden element w tablicy pasuje — ale nie odfiltruje tych, które nie pasują. Aby to zrobić za jednym zamachem, musisz się trochę bardziej skomplikować:

db.foo.aggregate([
// Make sure at *least* one label has a remark of DATA NOT FOUND;
// otherwise, the $filter trick in the next stage yields a labels array
// of length 0 (which is not horrible).  Also, this is a good place to
// add other $match criteria, possibly index-optimized, to shrink down the
// size of response set:
{$match: {"divisionIn.sections.labels.remarks":"DATA NOT FOUND"}}

,{$project: {
        // Copy over the main doc level things we want:
        projectDR: "$projectDR",
        code: "$code",
        status: "$status"

        // divisionIn is a map, not an array, so we can dive down using dot notation
        // and make a new sections array called divSections that will ONLY have
        // DATA NOT FOUND: 
        divSections: {$map: {input: "$divisionIn.sections", as:"z", in:
            {
                // Again, copy over things we want to keep; may not need all of them
                "sectionNumber": "$$z.sectionNumber",
                "sectionName": "$$z.sectionName",

                // The Juice: Copy BUT FILTER the labels field conditionally based on
                // the value of labels.remarks:
                "labels": {$filter: {input: "$$z.labels",
                             as: "z2",
                             cond: {$eq: [ "$$z2.remarks", "DATA NOT FOUND"] }
                    }}
            }
            }}
    }}

                       ]);



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Natywny sterownik znaleziony z modelu Mongoose nie zwraca kursora

  2. Jak zainstalować MongoDB

  3. Jaka jest podstawowa architektura aplikacji node.js + mongodb?

  4. jak korzystać z agregatu mongodb i pobierać całe dokumenty

  5. Dlaczego złącze Spark Mongo nie wypycha filtrów?