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

Získejte celé pole jedním z jeho řetězců. Pole je uvnitř jiného pole. Mongodb/Javascript

Použití agregačního dotazu:

  • $match podmínku, vložte vnořený $ememMatch pro 2 úrovně stavu
  • $reduce pro iteraci smyčky pole vid nastavte počáteční [], zkontrolujte podmínku, pokud je řetězec v aktuálním poli, pak vraťte aktuální pole, jinak vraťte počáteční hodnotu
let searchString = "adfsdfasfd";
db.collection.aggregate([
  {
    $match: {
      vid: { $elemMatch: { $elemMatch: { $in: [searchString] } } }
    }
  },
  {
    $addFields: {
      vid: {
        $reduce: {
          input: "$vid",
          initialValue: [],
          in: {
            $cond: [{ $in: [searchString, "$$this"] }, "$$this", "$$value"]
          }
        }
      }
    }
  }
])

Hřiště

Výsledek:

[
  {
    "vid": [
      "adfsdfasfd",
      "this is some sample text",
      "https://example.com"
    ]
  }
]

Pomocí vyhledávacího dotazu:

  • Zadejte podmínku shody jako výše
  • pro projekci získat výsledek shody, ale ve stejném vnořeném poli
let searchString = "adfsdfasfd";
db.collection.find(
  { vid: { $elemMatch: { $elemMatch: { $in: [searchString] } } } }
).project({ "vid.$": 1, _id: 0 }).toArray()

Hřiště

Výsledek:

[
  {
    "vid": [
      [
        "adfsdfasfd",
        "this is some sample text",
        "https://example.com"
      ]
    ]
  }
]



  1. jarní data - Mongodb - metoda findBy pro vnořené objekty

  2. RuntimeError:-ERR Neznámý příkaz spouští redis gem na Ruby

  3. Nastavení doby vypršení platnosti kolekce v mongodb pomocí mongoose

  4. Jak najít podle id v golang a mongodb