7 votes

Comment renommer/aliaser des champs lors de leur récupération depuis MongoDB à l'aide d'une requête en utilisant le pilote natif MongoDB-Node.JS?

Considérez le code suivant, que j'utilise pour récupérer les données de mon serveur MongoDB local.

var Db = require('mongodb').Db,
    MongoClient = require('mongodb').MongoClient,
    Server = require('mongodb').Server,
    ReplSetServers = require('mongodb').ReplSetServers,
    ObjectID = require('mongodb').ObjectID,
    Binary = require('mongodb').Binary,
    GridStore = require('mongodb').GridStore,
    Code = require('mongodb').Code,
    BSON = require('mongodb').pure().BSON,
    assert = require('assert');
var db = new Db('test', new Server('localhost', 27017)); 
db.open(function(err, db) {
  db.createCollection('simple_limit_skip_find_one_query', function(err, collection) {
    assert.equal(null, err);

    collection.insert([{a:1, b:1}, {a:2, b:2}, {a:3, b:3}], {w:1}, function(err, result) {
      assert.equal(null, err); 
      collection.findOne({a:1}, {fields:{b:1}}, function(err, doc) {
        // J'ai obtenu le document lu dans l'objet 'doc'
      });
    });
  });
});

Maintenant, je veux renommer un nom de champ tout en le récupérant uniquement (pas dans la base de données), par exemple avec le code ci-dessus, j'ai un champ nommé b dans l'objet retourné doc je veux qu'il soit baseID au lieu de b

Existe-t-il un moyen de le faire ?

Remarque : Je ne peux pas agir sur l'objet récupéré doc pour renommer le champ comme le renommage de clé JSON. Je veux que ce soit une requête et MongoDB fera de même.

5voto

Amol M Kulkarni Points 4105

Utilisez le cadre d'agrégation de MongoDB (Mais vous devez mettre à jour l'instance du serveur MongoDB à >= 2.1).

Voici la solution pour l'exemple ci-dessus

var Db = require('mongodb').Db,
    MongoClient = require('mongodb').MongoClient,
    Server = require('mongodb').Server,
    ReplSetServers = require('mongodb').ReplSetServers,
    ObjectID = require('mongodb').ObjectID,
    Binary = require('mongodb').Binary,
    GridStore = require('mongodb').GridStore,
    Code = require('mongodb').Code,
    BSON = require('mongodb').pure().BSON,
    assert = require('assert');
db.open(function (err, db) {
    if (err) console.dir(err);
    db.createCollection('simple_limit_skip_find_one_query', function (err, collection) {
        if (err) console.dir(err);

        collection.insert([{ a: 1, b: 1 }, { a: 2, b: 2 }, { a: 3, b: 3}], { w: 1 }, function (err, doc) {
            if (err) console.dir(err);

            collection.aggregate([
            { $project: {
                a: 1,
                _id:0,
                baseID: "$b"
            }
            }
          ], function (err, doc) {
              if (err) console.dir(err);
              console.log(doc);
          });
        });
    });
});

Résultat :

[ { a: 1, baseID: 1 },
  { a: 2, baseID: 2 },
  { a: 3, baseID: 3 }]

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X