sql >> Database >  >> NoSQL >> MongoDB

MongoDB geneste matrixquery

Na wat zoekacties te hebben uitgevoerd, kwam ik tot de conclusie dat $in niet werkt voor een array van arrays .

U kunt $elemMatch . gebruiken in plaats daarvan en het zal werken, maar het is frustrerend dat de documentatie van MongoDB er niet voor waarschuwt.

Ik heb dit document gemaakt:

{
      "_id": "51cb12857124a215940cf2d4",
      "level1": [
        [
          "item00",
          "item01"
        ],
        [
          "item10",
          "item11"
        ]
      ],
      "items": [
        "item20",
        "item21"
      ]
}

Merk op dat het veld "items" een reeks strings is en dat deze query perfect werkt:

db.nested.findOne({"items":{"$in":["item20"]} })

Nu is "level1.0" ook een array van strings, het enige verschil is dat het zich in een andere array bevindt. Deze zoekopdracht zou moeten werken, maar is niet:

db.nested.findOne({"level1.0":{"$in":["item00"]} })

De enige manier om het resultaat te krijgen is door $elemMatch te gebruiken:

db.nested.findOne({"level1":{"$elemMatch":{"$in":['item00']}} })

Dus $elemMatch lost het probleem op, maar de echte oplossing is om de documentatie van MongoDB bij te werken met de staten dat $in werkt niet voor arrays van arrays. Misschien moet je een verzoek indienen bij 10gen.



  1. Automatisering en beheer van open source-databases in de cloud - aankondiging van ClusterControl 1.6

  2. Een overzicht van MongoDB-schemavalidatie

  3. Hoe te controleren of een arrayveld een unieke waarde of een andere array in MongoDB bevat?

  4. Hoe addToSet uit te voeren met de officiële Go-driver?