MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Holen Sie sich das ganze Array von einem seiner Strings. Array befindet sich in einem anderen Array. Mongodb/Javascript

Zusammenfassungsabfrage verwenden:

  • $match Bedingung, setzen Sie verschachteltes $ememMatch für 2-Stufen-Zustand
  • $reduce Um die Schleife des vid-Arrays zu durchlaufen, initialisieren [], Bedingung prüfen, wenn String im aktuellen Array, dann aktuelles Array zurückgeben, andernfalls den Anfangswert zurückgeben
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"]
          }
        }
      }
    }
  }
])

Spielplatz

Ergebnis:

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

Suchabfrage verwenden:

  • Übereinstimmungsbedingung wie oben setzen
  • für Projektion erhalten Sie ein Übereinstimmungsergebnis, aber in demselben verschachtelten Array
let searchString = "adfsdfasfd";
db.collection.find(
  { vid: { $elemMatch: { $elemMatch: { $in: [searchString] } } } }
).project({ "vid.$": 1, _id: 0 }).toArray()

Spielplatz

Ergebnis:

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