2011-10-05 5 views
4

Y at-il une fonction Mongo (ligne de commande) que je peux transformer une chaîne en objet? par exemple. JSON.parse ou quelque chose comme ça? Db.sessions.update ({}, {'$ set': {'extra': JSON.parse (stringData)}}); db.tempData.update ({}, { '$ set':: { 'extra': db.eval (myString)}Tout JSON.parse intégré dans MongoDB?


ma solution:

function my_extra() { 
    db.tempData.find().forEach(function(obj) { 
         obj.extra = db.eval(obj.myString); 
         db.tempData.save(obj); 
        }); 
}; 

my_extra(); 

Cependant, j'essaie cette }); mais cela ne fonctionne pas .. dire myString n'est pas défini. donc j'utilise this.myString mais ne fonctionne pas non plus. C'est pourquoi je dois utiliser la fonction.

Y at-il un moyen de référencer myString dans le second paramètre?

+0

Qu'est-ce que vous essayez exactement de faire? Si vous voulez importer un tas de données, il y a un outil d'importation en ligne de commande http://www.mongodb.org/display/DOCS/Import+Export+Tools – SomethingOn

+0

Ce que je veux faire c'est .. les données actuelles que j'ai contient un objet JSON stringifié. par exemple. stringData: "{\" key \ ": 12345}" Je veux l'analyser et l'assigner de nouveau à l'enregistrement sous une nouvelle variable. :) – murvinlai

+0

Je sais que je peux utiliser node.js ou d'autres pour extraire les données, json parse, et le sauvegarder. mais j'ai près de 1M d'enregistrements. Je pense que le faire en Mongo sera plus rapide. – murvinlai

Répondre

5

Vous pouvez eval fonction:

obj = eval("(function() { return {\"key\": \"value\"} })()") 

Mais notez qu'il est dangereux parce qu'il peut exécuter du code Javascript arbitraire, y compris db.dropDatabase().

+0

merci. ce n'est pas un souci pour moi parce que les données sont générées en interne. : D merci. . – murvinlai

+0

Merci .. Ici, il est: fonction my_extra() { db.tempData.find() foreach (fonction (obj) { obj.extra = db.eval (obj.string); db.tempData. enregistrer (obj); }); } my_extra(); – murvinlai

+0

@murvinlai 'db.eval' n'est pas vraiment la même chose que' eval', il exécute la commande DB $ eval' (signifie aller-retour au serveur) pendant que 'eval' est exécuté dans shell. Heureux qu'il a aidé de toute façon, n'hésitez pas à marquer la réponse;) – pingw33n