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

Odstraňte dokumenty z kolekce MongoDB na základě času v poli Datum

Regulární výraz nebude fungovat na něco, co není řetězec. Ve skutečnosti neexistuje žádný jednoduchý způsob, jak vybrat Datum BSON čistě je to hodnota času v regulárním výrazu dotazu.

Chcete-li to provést, zadejte $where podmínku s dodatečnou logikou, která bude odpovídat právě času část hodnoty data.

Na základě údajů skutečně poskytnutých v otázce:

db.getCollection('collection').remove({
  "Id": "1585534",
  "Type": NumberInt(42),
  "$where": function() {
    return this.InDate.getUTCHours() === 18
      && this.InDate.getUTCMinutes() === 30
  }
})

Což je samozřejmě jen první dokument v poskytnutých datech, i když je ve skutečnosti identifikován pouze pomocí "Id" v každém případě, protože tato hodnota je mezi těmito dvěma jedinečná.

.getUTCHours() a .getUTCMinutes() jsou JavaScript Datum objektové metody, což je způsob Datum BSON je vyjádřeno při použití v rámci $where výraz.

Triviálně, MongoDB 3.6 (připravovaný v době psaní) umožňuje efektivnější formu než $where v agregačních výrazech:

db.getCollection('collection').aggregate([
  { "$match": {
    "Id": "1585534",
    "Type": NumberInt(42),
    "$expr": {
      "$and": [
        { "$eq": [{ "$hour": "$InDate" }, 18 ] },
        { "$eq": [{ "$minute": "$InDate" }, 30] } 
      ] 
    }   
  }}
])

Takové výrazy však nelze použít přímo s metodami, jako je .remove() nebo .deleteMany() , ale $where výrazy mohou.



  1. Mongodb nemůže dotazovat poddokument podle ID (vrací hodnotu null)

  2. MongoDB:Je možné omezit výsledky $lookup na určitá pole (jako projekci)?

  3. Vnořená filtrace populace je MongoDB

  4. Jak stáhnout soubor uložený pomocí GridFS a vrácený pomocí GraphQL v klientovi React/Javascript?