sql >> Databáze >  >> NoSQL >> MongoDB

Dotaz vnořeného pole MongoDB

Po provedení několika dotazů jsem došel k závěru, že $in nefunguje pro pole polí .

Můžete použít $elemMatch místo toho a bude to fungovat, ale je frustrující, že dokumentace MongoDB na to nevaruje.

Vytvořil jsem tento dokument:

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

Všimněte si, že pole "items" je pole řetězců a tento dotaz funguje perfektně:

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

Nyní je "level1.0" také polem řetězců, jediný rozdíl je v tom, že je uvnitř jiného pole. Tento dotaz by měl fungovat, ale není:

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

Jediný způsob, jak získat výsledek, je použít $elemMatch:

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

Takže $elemMatch řeší problém, ale skutečným řešením je aktualizovat dokumentaci MongoDB tak, aby bylo uvedeno, že $in nefunguje pro pole polí. Možná byste měli odeslat žádost 10gen.



  1. Jak získat zpětné volání na MongoDB collection.find()

  2. Jak mohu zastavit redis-server?

  3. Jak převedu vlastnost v MongoDB z textu na typ data?

  4. Aktualizujte dokumenty v MongoDB