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

Query sull'array nidificato MongoDB

Dopo aver eseguito alcune query, sono giunto alla conclusione che $in non funziona per un array di array .

Puoi usare $elemMatch invece e funzionerà, ma è frustrante che la documentazione di MongoDB non lo avverta.

Ho creato questo documento:

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

Si noti che il campo "items" è un array di stringhe e questa query funziona perfettamente:

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

Ora, "level1.0" è anche un array di stringhe, l'unica differenza è che si trova all'interno di un altro array. Questa query dovrebbe funzionare ma non lo è:

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

L'unico modo per ottenere il risultato è usare $elemMatch:

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

Quindi $elemMatch risolve il problema, ma la vera soluzione è aggiornare la documentazione di MongoDB per affermare che $in non funziona per array di array. Forse dovresti inviare una richiesta a 10gen.