2014-05-30 2 views
2

J'utilise nodejs pour interroger mongodb et je veux sortir json avec des noms de champs personnalisés.Dans NodeJS, comment afficher les résultats de mongodb avec différents noms de champs?

Par exemple, JSON d'origine de MongoDB peut-être

{id:1, text:"abc"} 

Je voudrais sortie comme

{ObjectID:1, DisplayText:"abc"}; 

Je comprends MongoDB a l'opérateur du projet $ dans son cadre global, mais pas sûr pour les utiliser dans NodeJS.

Les paquets nodejs MongoDB j'utilise sont

var mongo = require('mongodb'); 
    var monk = require('monk'); 
    var db = monk('server:port/mydb'); 

reconnaissant de tout conseil à ce sujet.

+0

Peut-être que cela vous aidera à démarrer: http://stackoverflow.com/questions/16252208/how-to-use-regex-in-mongodb-aggregation-query-within-match –

+0

Merci, John. Savez-vous quel paquet mongodb utiliser? J'ai utilisé une implémentation similaire et obtenir TypeError: L'objet # n'a pas de méthode 'collection'. – Lee

Répondre

9

Si vous utilisez moine comme vous semblez être, vous pouvez accéder au type de collection pilote natif de noeud sous-jacent via l'accesseur .col sur votre objet de collection sélectionnée:

var db = require('monk')('localhost/test') 
    , collection = db.get('example'); 

    collection.col.aggregate(
    [ 
     { "$project": { 
     "_id": 0, 
     "ObjectID": "$_id", 
     "DisplayText": "$text" 
     }} 
    ], 
    function(err,result) { 

     console.log(JSON.stringify(result, undefined, 4)); 

    } 
); 

Notez que des méthodes telles que .aggregate() récupérées de cette manière ne sont pas enveloppées dans l'objet promesse comme le sont les objets de collection monk standard. Mais au moins cela vous montre comment accéder et utiliser $project pour reformater votre document.

+0

Merci, Neil. Cela semble fonctionner bien que j'obtiens une erreur différente: "le résultat d'agrégation dépasse la taille maximum de document (16MB)", mais je crois que ceci devrait être une question distincte que je devrais travailler dessus. – Lee

+1

@ user3492125 En l'état, cela tente de sortir toute la collection vers ce qui est essentiellement un tableau, donc vous ne voulez probablement pas la totalité de la collection si vous envoyez une réponse au client. Il y a d'autres approches mais probablement la plus spécifique à vous en ce moment est l'opérateur de pipeline [** '$ match' **] (http://docs.mongodb.org/manual/reference/operator/aggregation/match/) dans l'ordre pour réduire les résultats. Au moins, vous savez comment utiliser agrégat avec moine maintenant. N'hésitez pas à poster d'autres questions pour empiler le débordement si vous les avez. –

+0

Neil, vous avez un esprit vif. C'est exactement ce que j'ai manqué plus tôt. Je vous remercie. – Lee

Questions connexes