sql >> Databasteknik >  >> NoSQL >> MongoDB

Hur använder man $set och dot notation för att uppdatera inbäddade arrayelement med motsvarande gamla element?

Om fältet är medlem i en array genom att markera det väljer du dem alla.

{ar :[{"a" : 1}, {"a" : 2}]}

"$ar.a" = [1 ,2]

Du kan inte heller blanda uppdateringsoperatorer med aggregering, du kan inte använda saker som$sites.$.energy_consumption , om du gör aggregering måste du använda aggregerade operatorer, med undantag för $match steg där du kan använda frågeoperatorer.

Fråga

  • alternativ något annorlunda lösning än din med $setField
  • Jag antar att det kommer att gå snabbare, men förmodligen liten skillnad
  • du behöver inte använda javascript det kommer att gå långsammare
  • detta är>=MongoDB 5-lösning, $setField är ny operatör

Testkod här

aggregate(
[{"$set":
  {"sites":
   {"$map":
    {"input":"$sites",
     "in":
     {"$setField":
      {"field":"new_field",
       "input":"$$this",
       "value":"$$this.energy_consumption"}}}}}}]
)


  1. MongoDB-lösenord med @ i

  2. Designa en applikation med Redis som datalager. Vad? Varför?

  3. Klass 'Jenssegers\Mongodb\MongodbServiceProvider' hittades inte

  4. Vad är det korrekta sättet att fråga MongoDB för _id med sträng med Python?