2012-02-09 2 views
0

Ma tâche consiste à créer un référentiel étendant MongoDBRepository qui me permet de définir le type de méthode findAndUpdate. L'approche MongoOps et le modèle ne sont pas autorisés. Voici comment mon MongoDocument ressemble à:findAndUpdate MongoDBRepository

{"_id":"somedocumentId","attributetype1":{"class":"type1","value":"somevalue"}, 
      "attributetype2":{"class":"type2","value":"somevalue"}, 
      "attributetype3":{{"class":"type2","value":"somevalue"},{"class":"type2","value":"somevalue"},...,} 

Comme vous pouvez voir quelques atributs ne sont que des valeurs de classe, tandis que d'autres sont des listes. Voici la demande de mise à jour que je reçois de mon sous-système de messagerie:

{"documentId":"somedocumentIdValue","updatedata":{"class":"typeX","value":"somevalue"} 

Si le type de données de demande est juste une valeur de classe (comme attributetype1 et 2) je dois le mettre à jour, si les données de mise à jour est de type qui est enregistrer en tant que liste je dois l'ajouter.

Que suggérez-vous dans ce cas?

+0

Voulez-vous dire que vous ne pouvez pas utiliser findAndModify de mongo? Pourquoi? –

Répondre

0

Vous devez être en mesure de déterminer si vous voulez ou non faire un $set ou un $push alors il semble y avoir trois choix.

  1. Mettez à jour le sous-système de messagerie pour inclure l'opérateur.

    Cela peut ne pas être possible ..

  2. Émettre une findAndModify avec un $push.

    Cela échouera si son pas un tableau:

    ne pouvez pas appliquer push $/$ modificateur pushAll à la non-tableau

    Alors Reconduire avec un $set

    Se sent comme un pirater mais fonctionnera

  3. Faire une requête qui renvoie le documentez et inspectez-le, puis publiez l'opérateur correct dans une requête de mise à jour.

    code plus nécessaire dans l'application