sql >> Database teknologi >  >> NoSQL >> MongoDB

Flyt et element fra et array til et andet inden for samme dokument MongoDB

Der er ingen $move i MongoDB . Når det er sagt, er den nemmeste løsning en 2-faset tilgang:

  1. Forespørg på dokumentet
  2. Lav opdateringen med en $pull og $push /$addToSet

Den vigtige del her, for at sikre, at alt er idempotent, er at inkludere det originale array-dokument i forespørgslen til opdateringen.

Givet et dokument af følgende form:

{
    _id: "foo",
    arrayField: [
        {
            a: 1,
            b: 1
        },
        {
            a: 2,
            b: 1
        }
    ]
}

Lad os sige, at du vil flytte { a: 1, b: 1 } til et andet felt, måske kaldet someOtherArrayField , vil du gerne gøre noget lignende.

var doc = db.col.findOne({_id: "foo"});
var arrayDocToMove = doc.arrayField[0];
db.col.update({_id: "foo", arrayField: { $elemMatch: arrayDocToMove} }, { $pull: { arrayField: arrayDocToMove }, $addToSet: { someOtherArrayField: arrayDocToMove } })

Grunden til at vi bruger $elemMatch er at være sikker på, at det felt, vi er ved at fjerne fra arrayet, ikke har ændret sig, siden vi første gang forespurgte dokumentet. Når det kombineres med en $pull det er heller ikke strengt nødvendigt, men jeg er typisk for forsigtig i disse situationer. Hvis der ikke er nogen parallelitet i din ansøgning, og du kun har én ansøgningsinstans, er det ikke strengt nødvendigt.

Når vi nu tjekker det resulterende dokument, får vi:

db.col.findOne()
{
        "_id" : "foo",
        "arrayField" : [
                {
                        "a" : 2,
                        "b" : 1
                }
        ],
        "someOtherArrayField" : [
                {
                        "a" : 1,
                        "b" : 1
                }
        ]
}



  1. Indlæser indledende data ved applikationsstart med Spring Data MongoDB

  2. Mongo Atlas:Forbindelsesgodkendelse mislykkedes med brugerdefinerede databaser

  3. Seks kritiske komponenter i en vellykket dataforvaltning

  4. Oprettelse af dynamisk skema ved hjælp af mongoose