sql >> Databasteknik >  >> NoSQL >> MongoDB

Ersätter inbäddat dokument i array i MongoDB

Du använder mönstret "array of objects". Du kan använda positionsoperatorn, den ska se ut ungefär så här:

coll.update( {'_id':'2', 'users._id':'2'}, {$set:{'users.$':{ "_id":2,"name":"name6",... }}}, false, true)

Enligt min erfarenhet är "array of objects"-mönstret inte optimalt om objekten har ett naturligt ID. I ditt fall kan detta modelleras som följande:

{
  "_id" : "2",
  "users" : 
    { "1" : { "name" : "name1", "xyz..." : "xyz1..." }, 
      "2" : { "name" : "name2", "xyz..." : "xyz2..." }
    }
  "name" : "main name"
}

I det här fallet kan du använda punktnotationen för att enkelt uppdatera objektet du vill ha.

var newValue = {  "name" : "name6", "xyz..." : "xyz5...", "morefields..." : "fields..." };
coll.update({_id: 2}, { $set: { "users.2" : newValue } });



  1. MongoDB-aggregation med Java-drivrutin

  2. Anslutning till Redis (ElastiCache) från ElasticBeanstalk EC2 misslyckas

  3. Redis - Hur hänger nyckeln HASH och SET och ZSET ihop på CrudRepository save?

  4. Söksträng med specialtecken i MongoDB-dokument