sql >> Database teknologi >  >> NoSQL >> MongoDB

MongoDB indlejret matrixforespørgsel

Efter at have kørt nogle forespørgsler kom jeg til den konklusion, at $in ikke virker for en række arrays .

Du kan bruge $elemMatch i stedet, og det vil virke, men det er frustrerende, at MongoDBs dokumentation ikke advarer om det.

Jeg har oprettet dette dokument:

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

Bemærk, at feltet "elementer" er en række strenge, og denne forespørgsel fungerer perfekt:

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

Nu er "level1.0" også en række af strenge, den eneste forskel er, at den er inde i et andet array. Denne forespørgsel burde virke, men er ikke:

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

Den eneste måde at få resultatet på er at bruge $elemMatch:

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

$elemMatch løser problemet, men den rigtige løsning er at opdatere MongoDBs dokumentation til at angive $in virker ikke for arrays af arrays. Måske skulle du indsende en anmodning til 10gen.



  1. Når jeg starter blomst, får jeg følgende:dbm.error:db-typen er dbm.gnu, men modulet er ikke tilgængeligt

  2. Returnerer indre array-elementer fra flere dokumenter i sorteret form

  3. Hvordan listes alle MongoDB-databaser i Node.js?

  4. Hvordan sender socket.io beskeder på tværs af flere servere?