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

MongoDB min

MongoDB má $min operátor, který umožňuje aktualizovat hodnotu pole pouze v případě, že je zadaná hodnota menší než aktuální hodnota pole.

Jinými slovy, pokud $min hodnota je menší než aktuální hodnota v dokumentu, $min je použita hodnota. Jinak zůstane hodnota dokumentu nezměněna.

Příklad

Předpokládejme, že máme kolekci nazvanou golf s následujícím dokumentem:

{ "_id" : 1, "strokes" : 70 } 

A představte si, že dokument aktualizujeme po každém golfu o nejnovější skóre. V tomto případě bychom chtěli pouze strokes pole, které bude aktualizováno, pokud bude naše poslední skóre nižší než naše předchozí skóre.

V tomto případě bychom mohli použít $min operátora k dosažení tohoto výsledku.

Příklad:

db.golf.update( 
  { _id: 1 }, 
  { $min: { strokes: 64 } } 
)

Výstup:

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

Tato zpráva nám říká, že jeden dokument se shodoval a byl aktualizován.

Podívejme se znovu na sbírku.

db.golf.find()

Výsledek:

{ "_id" : 1, "strokes" : 64 }

Vidíme, že strokes pole bylo aktualizováno novou hodnotou. Je to proto, že 64 je nižší než jeho předchozí hodnota 70.

Když je hodnota vyšší

Když je hodnota zadaná pomocí $min je vyšší než stávající hodnota v dokumentu, nic se neaktualizuje.

Příklad:

db.golf.update( 
  { _id: 1 }, 
  { $min: { strokes: 72 } } 
)

Výstup:

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 0 })

Podle zprávy vidíme, že nebylo nic aktualizováno.

Podívejme se znovu na sbírku.

db.golf.find()

Výsledek:

{ "_id" : 1, "strokes" : 64 }

Vidíme, že hodnota zůstává na 64, i když jsme se ji pokusili aktualizovat na 72. To se očekává, protože jsme použili $min .

Data

Můžete použít $min v datech.

Předpokládejme, že máme collection nazvaný druh s následujícím dokumentem:

{ "_id" : 1, "firstDiscovered" : ISODate("2000-01-01T00:00:00Z") } 

Zkusme aktualizovat datum datem, které je pozdější než aktuální datum v dokumentu.

db.species.update( 
  { _id: 1 }, 
  { $min: { firstDiscovered: new Date("2001-01-01") } } 
)

Zde se snažíme aktualizovat rok z 2000 do 2001 . Vzhledem k tomu, že nové datum je pozdější než stávající, dostáváme následující:

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 0 })

Nic nebylo aktualizováno.

Podívejme se na sbírku:

db.species.find()

Výsledek:

{ "_id" : 1, "firstDiscovered" : ISODate("2000-01-01T00:00:00Z") } 

Podle očekávání zůstává stejná hodnota data.

Nyní jej zkusme aktualizovat na dřívější datum.

db.species.update( 
  { _id: 1 }, 
  { $min: { firstDiscovered: new Date("1999-01-01") } } 
)

Výstup:

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

Podle zprávy vidíme, že dokument byl aktualizován.

Zkontrolujeme.

db.species.find()

Výsledek:

{ "_id" : 1, "firstDiscovered" : ISODate("1999-01-01T00:00:00Z") } 

Datum bylo aktualizováno podle očekávání.


  1. Geoprostor $ blízko aktuální hodnoty pole dokumentu

  2. Má každé volání v rámci volání multi() v phpredis za následek novou síťovou zpáteční cestu do redis?

  3. Slovník Pythonu:odstranění u' znaků

  4. Dotaz Mongoose near(...) na indexované pole 2dsphere nevrací platné výsledky