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

Mongodb punktfeltopdatering

Det gør den selvfølgelig, da det er præcis, hvad du beder den om at gøre. På trods af din titel er der ingen brug af "dot notation" her overhovedet. Dette er selvfølgelig, hvad du vil gøre, hvis du har til hensigt ikke at overskrive eksisterende egenskaber. Lige nu udskifter du bare hele objektet på trods af din brug af $set hvor medmindre du ændrer strukturen her er dybest set overflødig.

For at "rette" dette, skal du manipulere dine data objekt først. Med noget i denne retning:

var newobj = {};
Object.keys( data ).forEach(function(key) {
    if ( typeof(data[key]) == "object" ) {
       Object.keys( data[key] ).forEach(function(subkey) {
           newobj[key + "." + subkey] = data[key][subkey];
       });
    } else {
       newobj[key] = data[key];
    }
});

Det giver dig og output i newobj struktur som denne:

{
    "postcode" : "BV123456789BY",
    "status.last_check" : 1413539153572,
    "status.code" : "06",
    "status.postnum" : "247431",
    "status.date" : ISODate("2014-10-17T11:28:20.540Z"),
    "status.text" : "06. Поступило в участок обработки почты (247431) Светлогорск - 1"
}

Så kan du selvfølgelig fortsætte med din normale opdatering og få alt rigtigt:

Order.update({ "postcode": newobj.postcode}, { "$set": newobj }, function (err) {
    if (err) console.log(err);
});

Selvfølgelig ville du have brug for noget rekursion for en mere indlejret struktur, men dette burde give dig den generelle idé. Punktnotation er vejen at gå, men du skal faktisk bruge det.




  1. MongoDB - hjælp til en PHP-forespørgsel

  2. MongoDB $sqrt

  3. Find MongoDB-poster, hvor arrayfeltet ikke er tomt

  4. Implementer MongoDB i en Amazon Virtual Private Cloud (VPC)