2012-01-25 2 views
4

J'essaie d'appeler un fragment javascript MongoDB à l'aide du commutateur de ligne de commande mongo.exe --eval. Cela fonctionne très bien lorsqu'il est exécuté à partir de la ligne de commande Windows, mais je veux l'appeler à partir d'un script Powershell comme ceci:Problème d'invocation de la mise à jour MongoDB à l'aide du shell --eval de Powershell

Invoke-Expression "& `"C:\MongoDB\bin\mongo.exe`" localhost:27017/mydb --eval `"db.mydata.update({}, {`$set : {v : 1}})`" --quiet" 

Il n'y a qu'un seul document dans la collection monTableau, et je veux définir son champ v à 1. Mais l'expression ci-dessus renvoie SyntaxError: invalid property id (shell eval):1 lorsqu'elle est exécutée à partir d'un script Powershell et ne met pas à jour le document.

Ce qui est encore plus déroutant est que le suivi fonctionne comme prévu:

Invoke-Expression "& `"C:\MongoDB\bin\mongo.exe`" localhost:27017/mydb --eval `"printjson(db.mydata.findOne())`" --quiet" 

Toutes les idées que je pourrais faire mal?

Mise à jour:

La solution:

Invoke-Expression '& "C:\MongoDB\bin\mongo.exe" localhost:27017/mydb --eval "db.mydata.update({}, {`$set : {v : 2}})" --quiet' 

Répondre

14

Essayez d'utiliser des guillemets simples au lieu de guillemets autour de la déclaration eval.

+0

Ce fut tout. Merci! –

0

@Wes Freeman a sauvé ma journée!

MongoDB Reference mongo program use

Utilisez des guillemets simples (par exemple) pour entourer le JavaScript, ainsi que le JavaScript supplémentaire nécessaire pour générer cette sortie.

1

Pour votre information, ce n'est pas seulement spécifique à PowerShell, il est applicable à l'exécution mongo sur toute plate-forme (Windows, Mac OS X, etc.)

Questions connexes