sql >> Database >  >> NoSQL >> MongoDB

Haal de hele array op met een van de strings. De array bevindt zich in een andere array. Mongodb/Javascript

Aggregatiequery gebruiken:

  • $match voorwaarde, zet geneste $ememMatch voor conditie op 2 niveaus
  • $reduce om de lus van de vid-array te herhalen, stelt u de initiële [] in, controleert u de voorwaarde als de tekenreeks in de huidige array is en retourneert u de huidige array, anders retourneert u de beginwaarde
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"]
          }
        }
      }
    }
  }
])

Speeltuin

Resultaat:

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

Zoekopdracht gebruiken:

  • Zet de overeenkomstvoorwaarde hetzelfde als hierboven
  • krijg voor projectie een matchresultaat maar in dezelfde geneste array
let searchString = "adfsdfasfd";
db.collection.find(
  { vid: { $elemMatch: { $elemMatch: { $in: [searchString] } } } }
).project({ "vid.$": 1, _id: 0 }).toArray()

Speeltuin

Resultaat:

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



  1. MongoDB-kaart ()

  2. Hoe vertel je Mongo een verzameling te sorteren voordat de resultaten worden beperkt?

  3. Mongoengine-deferentie vindt plaats na gebruik van select_related()

  4. Hoe wijzig ik het wachtwoord van een MongoDB-gebruiker?