Peut mongo upsert tableau de données?

J'ai un mongo document de ce genre.

{
    "_id" : ObjectId("50b429ba0e27b508d854483e"),
    "array" : [
        {
            "id" : "1",
            "letter" : "a"
        },
        {
            "id" : "2",
            "letter" : "b"
        }
    ],
    "tester" : "tom"
}

Je veux être capable d'insérer et mettre à jour les array avec un seul mongo commande et ne pas utiliser un conditionnel dans un find() puis exécutez insert() et update() en fonction de la présence de l'objet.

La id est l'élément que je veux être le sélecteur. Donc, si je mets à jour le tableau avec cette:

{
    "id" : "2",
    "letter" : "c"
}

- Je utiliser un $set déclaration

db.soup.update({
    "tester":"tom",
    'array.id': '2'
}, {
    $set: {
        'array.$.letter': 'c'
    }
})

Et si je veux insérer un nouvel objet dans le tableau

{
    "id" : "3",
    "letter" : "d"
}

- Je utiliser un $push déclaration

db.soup.update({
    "tester":"tom"
}, {
    $push: {
        'array': {
            "id": "3",
            "letter": "d"
        }
    }
})

J'ai besoin d'une sorte de upsert pour un élément de tableau.

Dois-je le faire par programmation ou puis-je le faire avec un seul mongo appel?

  • Cela m'étonne que mongo n'ai toujours pas cette fonctionnalité de base que je croise plusieurs fois dans chaque projet que j'ai utilisé mongo avec :/
InformationsquelleAutor ThomasReggi | 2012-11-27