sql >> Database >  >> NoSQL >> MongoDB

Mongodb upsert ingesloten document

Ik denk dat je de opdracht $addToSet wilt - die een element alleen naar een array zal pushen als het nog niet bestaat. Ik heb je voorbeeld een beetje vereenvoudigd voor de beknoptheid:

db.meters.findOne()
{
    "_id" : ObjectId("4f8e95a718bc9c7da1e6511a"),
    "config" : {
        "someparam" : 4.5
    },
    "data" : [
        {
            "Meter" : 123456789,
        }
    ],
    "key" : "20120418_123456789"
}

Voer nu uit:

db.meters.update({"key" : "20120418_123456789"}, {"$addToSet": {"data" : {"Meter" : 1234}}})

En we krijgen de bijgewerkte versie:

db.meters.findOne()
{
    "_id" : ObjectId("4f8e95a718bc9c7da1e6511a"),
    "config" : {
        "someparam" : 4.5
    },
    "data" : [
        {
            "Meter" : 123456789,
        },
        {
            "Meter" : 1234
        }
    ],
    "key" : "20120418_123456789"
}

Voer dezelfde opdracht opnieuw uit en het resultaat is ongewijzigd.

Opmerking:u zult deze documenten waarschijnlijk uitbreiden, vooral als dit veld onbegrensd is en frequente (relatief dure) verplaatsingen veroorzaakt door op deze manier bij te werken - u zou hier moeten kijken voor ideeën om dit te verminderen:

http://www.mongodb.org/display/DOCS/Padding +Factor#PaddingFactor-ManualPadding




  1. Graphql maakt relaties tussen twee query's. Fout kan niet worden geopend vóór initialisatie

  2. Een zoekopdracht opslaan in Mongo

  3. brew install php56-mongo Commando Werkt niet

  4. MongoDb C# getypte aggregaties met Group Unwind en Project