sql >> Databasteknik >  >> NoSQL >> MongoDB

MongoDB $min

MongoDB har en $min operator som låter dig uppdatera värdet på ett fält endast om det angivna värdet är mindre än det aktuella värdet för fältet.

Med andra ord, om $min värdet är mindre än det aktuella värdet i dokumentet, $min värde används. Annars förblir dokumentets värde oförändrat.

Exempel

Anta att vi har en samling som heter golf med följande dokument:

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

Och föreställ dig att vi uppdaterar dokumentet efter varje golfomgång med den senaste poängen. I det här fallet vill vi bara ha strokes fältet som ska uppdateras om vårt senaste resultat var lägre än vår tidigare poäng.

I det här fallet kan vi använda $min operatör för att uppnå detta resultat.

Exempel:

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

Utdata:

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

Detta meddelande berättar att ett dokument matchade och uppdaterades.

Låt oss kolla in samlingen igen.

db.golf.find()

Resultat:

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

Vi kan se att strokes fältet uppdaterades med det nya värdet. Detta beror på att 64 är lägre än dess tidigare värde på 70.

När värdet är högre

När värdet anges med $min är högre än det befintliga värdet i dokumentet uppdateras ingenting.

Exempel:

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

Utdata:

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

Vi kan se på meddelandet att ingenting har uppdaterats.

Låt oss kolla in samlingen igen.

db.golf.find()

Resultat:

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

Vi kan se att värdet ligger kvar på 64, även om vi försökte uppdatera det till 72. Detta förväntas eftersom vi använde $min .

Datum

Du kan använda $min på datumfält.

Anta att vi har en collection kallas art med följande dokument:

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

Låt oss försöka uppdatera datumet med ett datum som är senare än det aktuella datumet i dokumentet.

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

Här försöker vi uppdatera årtalet från 2000 till 2001 . Med tanke på att det nya datumet är senare än det befintliga får vi följande:

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

Ingenting uppdaterades.

Låt oss kolla samlingen:

db.species.find()

Resultat:

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

Som förväntat finns samma datumvärde kvar.

Låt oss nu försöka uppdatera den med ett tidigare datum.

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

Utdata:

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

Vi kan se på meddelandet att dokumentet har uppdaterats.

Låt oss kolla.

db.species.find()

Resultat:

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

Datumet uppdaterades som förväntat.


  1. redis timeout med predis

  2. Mongoose find() RegExp för fältet nummertyp

  3. Hur söker man efter nycklar med ett värde? Få till exempel alla NYCKLAR där värdet är något värde

  4. Mongoose/mongoDB-frågan går med... men jag kommer från en SQL-bakgrund