sql >> Database >  >> NoSQL >> MongoDB

Hoe gebruik je $ set en puntnotatie om ingesloten array-elementen bij te werken met het overeenkomstige oude element?

Als het veld lid is van een array door het te selecteren, selecteert u ze allemaal.

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

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

Ook kun je update-operators niet combineren met aggregatie, je kunt dingen als$sites.$.energy_consumption niet gebruiken , als u aggregatie uitvoert, moet u aggregatieoperatoren gebruiken, met als enige uitzondering de $match fase waarin u query-operators kunt gebruiken.

Zoekopdracht

  • alternatief iets andere oplossing dan de uwe met behulp van $setField
  • ik denk dat het sneller zal zijn, maar waarschijnlijk weinig verschil
  • je hoeft geen javascript te gebruiken, het zal langzamer zijn
  • dit is>=MongoDB 5-oplossing, $setField is nieuwe operator

Test code hier

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


  1. Mongoose / MongoDB:tel elementen in array

  2. Hoe fetchNewObject gebruiken met update.one ReactiveMongo?

  3. hoe op te lossen:'MongoError:authenticatie mislukt' @MongoDB Atlas

  4. Geef een .js-bestand door aan mongo db.eval()