2014-07-03 3 views
1

Est-il possible d'utiliser des opérateurs de mise à jour (tels que $ set) dans les mises à jour effectuées via MongoDB Cloud Connector dans Mule? Je voudrais effectuer une opération update-objects-using-map pour ajouter un champ aux objets correspondants, qui existent déjà dans ma collection. Actuellement, il remplace tous les champs existants par le champ que j'essaie d'ajouter. Je dois ajouter l'opérateur $ set pour accomplir ce que je veux.Opérateurs de mise à jour dans Mule MongoDB Cloud Connector

Voici une configuration exemple:

<mongo:update-objects-using-map config-ref="Mongo_DB" doc:name="Mongo DB" database="myDatabase" password="myPassword" username="myUser" collection="test_SalesInvoice" multi="false" upsert="true"> 
    <mongo:query-attributes> 
     <mongo:query-attribute key="Invoice">#[payload.Invoice]</mongo:query-attribute> 
    </mongo:query-attributes> 
    <mongo:element-attributes > 
     <mongo:element-attribute key="Worked">yes</mongo:element-attribute> 
    </mongo:element-attributes> 
</mongo:update-objects-using-map> 

Merci!

Justin

+0

il y a un test pour $ mis à jour ici https://github.com/mulesoft/mongo-connector/blob/e0830c029d27f1b29e9a53fb852b5d0cba9e08c6/src/test/java/org/mule/module/ mongo/automation/testcases/UpdateObjectsUsingQueryMapTestCases.java # L60 il semble que vous ayez besoin de lui passer "$ set" comme objet de mise à jour, où vous passez le nouveau champ comme objet de premier niveau. Voici un exemple de syntaxe xml pour $ set https://github.com/mulesoft/mongo-connector/blob/fad5b5cf0c239f8f540b2ed9f455c079494be762/demo/src/main/app/mongo-demo.xml#L43 –

+0

En regardant des exemples et des tests, il semble que vous ayez besoin de le passer '$ set' comme élément de niveau supérieur pour la mise à jour: oui Il semble également y avoir une mise à jour-objets-par-fonction-utilisant-carte avec la fonction étant '$ set': Ne pas avoir d'environnement à tester donc ne peut pas tel l vous qui travaillerez pour vous. –

+0

Ah, il semblerait que update-objects-by-function-using-map puisse faire l'affaire! Je vais faire des tests plus approfondis et ensuite mettre à jour ici. Je vous remercie! – jhildreth

Répondre

0
<mongo:update-objects-by-function-using-map collection="yourCollection" 
                config-ref="MongoDatabase" doc:name="Update Object" 
                upsert="true" function="$set"> 
      <mongo:query-attributes> 
       <mongo:query-attribute key="id">#[payload.id]</mongo:query-attribute> 
      </mongo:query-attributes> 
      <mongo:element-attributes> 
       <mongo:element-attribute key="newField">#[payload.newFieldValue]</mongo:element-attribute></mongo:element-attributes> 
     </mongo:update-objects-by-function-using-map> 

id : is the attribute that will match with the original object to be update 
newField : its the name of the new attribute that u want to add to u object on mongodb 
+0

Bien que votre réponse puisse résoudre la question, il est toujours préférable de fournir une description du problème et de la façon dont votre réponse l'a résolu. Ceci est une suggestion pour améliorer encore ceci et les réponses futures. –

+0

Merci pour la réponse! Je n'ai plus de configuration d'environnement pour tester cette solution, mais ce que je retiens de la solution indique que cela est probablement proche de ce dont j'avais besoin. J'espère que d'autres pourront trouver cela utile. – jhildreth

+0

la description du problème: un utilisateur veut mettre à jour une liste d'objet sur mongoDb lancer Mule ESB, c'est exactement comme faire un (Update où ..) avec SQL. –