MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Usuń dokumenty z kolekcji MongoDB na podstawie czasu w polu Data

Wyrażenie regularne nie zadziała na czymś, co nie jest ciągiem. Właściwie nie ma prostego sposobu na wybranie Daty BSON przez samą wartość czasu w zwykłym wyrażeniu zapytania.

W tym celu podaj $where warunek z dodatkową logiką do dopasowania tylko w czasie część wartości daty.

Na podstawie danych faktycznie dostarczonych w pytaniu:

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

Który jest oczywiście tylko pierwszym dokumentem w dostarczonych danych, mimo że tak naprawdę jest identyfikowany przez "Id" w każdym razie, ponieważ ta wartość jest unikalna między nimi.

.getUTCHours() i .getUTCMinutes() są JavaScript Data metody obiektowe, czyli jak BSON Date jest wyrażany, gdy jest używany w $where wyrażenie.

Co oczywiste, MongoDB 3.6 (wkrótce w momencie pisania) pozwala na bardziej wydajną formę niż $gdzie w wyrażeniach agregujących:

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

Jednak takich wyrażeń nie można używać bezpośrednio z metodami takimi jak .remove() lub .deleteMany() , ale $where wyrażenia mogą.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB:Pobieranie listy wszystkich baz danych?

  2. Pobierz wiele elementów z zapytaniami w tablicy obiektów w kolekcji MongoDB

  3. MongoDB operator zapytań typu $

  4. jak przekazać zmienne $tid, $id do funkcji raw?

  5. Łączenie się z MongoDB Atlas z funkcji Firebase