node.js mongodb seleccione documento de _id nodo-mongodb-nativo

Estoy tratando de seleccionar un documento de identificación

He probado:

collection.update({ "_id": { "$oid": + theidID } }

collection.update({ "_id": theidID }

collection.update({ "_id.$oid": theidID }}

También trató de:

collection.update({ _id: new ObjectID(theidID ) }

Este me da un error 500…

var mongo = require('mongodb')
var BSON = mongo.BSONPure;
var o_id = new BSON.ObjectID(theidID );

collection.update({ _id: o_id }

Ninguno de estos trabajos. Cómo seleccionar _id?

  • collection.find({"_id": ObjectId(theidID)}) debería funcionar.
  • ¿Te funciona?
  • Me di por vencido y terminó la asignación de un ID personalizado para cada doc.
  • Necesito esto para un selecto/buscar (no una actualización, incluso). Suerte?
  • No funcionará si usted no tiene una referencia al derecho a la serializador.
InformationsquelleAutor Mark | 2011-02-04

7 Kommentare

  1. 122
    var mongo = require('mongodb');
    var o_id = new mongo.ObjectID(theidID);
    collection.update({'_id': o_id});
    • Año 2016 – todavía funciona bien. Si no maby había native_parser:false – verificación Raphael respuesta a continuación
    • Esto funciona. Asegúrese de que la está llamando ObjectID() en require('mongodb') y no en require('mongodb').MongoClient
    • Por esta manera tengo mongoClient.ObjectID is not a constructor de error.
  2. 66

    Este el enfoque que trabajó para mí.

    var ObjectId = require('mongodb').ObjectID;
    
    var get_by_id = function(id, callback) {
      console.log("find by: "+ id);
      get_collection(function(collection) {
        collection.findOne({"_id": new ObjectId(id)}, function(err, doc) {
           callback(doc);
        });
      });
    }
  3. 17

    ahora puedes usar este:

    var ObjectID = require('mongodb').ObjectID;
    var o_id = new ObjectID("yourObjectIdString");
    ....
    collection.update({'_id': o_id});

    Se puede ver la documentación aquí

  4. 11

    Con native_parser:false:

    var BSON = require('mongodb').BSONPure;
    var o_id = BSON.ObjectID.createFromHexString(theidID);

    Con native_parser:true:

    var BSON = require('mongodb').BSONNative;
    var o_id = BSON.ObjectID.createFromHexString(theidID);
  5. 5

    Acabo de utilizar este código en Node.js aplicación en el controlador de archivo y funciona:

    var ObjectId = require('mongodb').ObjectId;
    ...
    User.findOne({_id:ObjectId("5abf2eaa1068113f1e")})
    .exec(function(err,data){
       //do stuff
    })

    no se olvide de instalar «mongodb» antes, y si usted está utilizando el cifrado de las contraseñas con bcrypt con «presave», asegúrese de que usted no va a cifrar la contraseña después de cada modificación del registro en la DB.

  6. 0

    La respuesta depende del tipo de variable que se pasa como en el id. Me sacó un identificador de objeto haciendo una consulta y almacenamiento de mi account_id como el ._id atributo. Usando este método, usted simplemente consulta mediante el mongo de identificación.

    //begin account-manager.js
    var MongoDB   = require('mongodb').Db;
    var dbPort      = 27017;
    var dbHost      = '127.0.0.1';
    var dbName      = 'sample_db';
    db = new MongoDB(dbName, new Server(dbHost, dbPort, {auto_reconnect: true}), {w: 1});
    var accounts = db.collection('accounts');
    
    exports.getAccountById = function(id, callback)
    { 
      accounts.findOne({_id: id},
        function(e, res) {  
        if (e) {
            callback(e)
        }
        else {
            callback(null, res)
        }
    
      });
    }
    //end account-manager.js
    
    //my test file
    var AM = require('../app/server/modules/account-manager');
    
    it("should find an account by id", function(done) {
    
    AM.getAllRecords(function(error, allRecords){
      console.log(error,'error')
      if(error === null) {
        console.log(allRecords[0]._id)
        //console.log('error is null',"record one id", allRecords[0]._id)
        AM.getAccountById(          
          allRecords[0]._id,
          function(e,response){
            console.log(response,"response")
            if(response) {
              console.log("testing " + allRecords[0].name + " is equal to " + response.name)
              expect(response.name).toEqual(allRecords[0].name);
              done();    
            } 
          }
        )  
      } 
    })

    });

  7. 0

    Esto es lo que ha funcionado para mí.
    Usando mongoDB

    const mongoDB = require('mongodb')

    A continuación, en la parte inferior donde estoy haciendo mi expreso conseguir llamar.

    router.get('/users/:id', (req, res) => {
    const id = req.params.id;
    var o_id = new mongoDB.ObjectID(id);
    
    const usersCollection = database.collection('users');
    
    usersCollection.findOne({
      _id: o_id
    })
    
    .then(userFound => {
      if (!userFound){
        return res.status(404).end();
      }
      //console.log(json(userFound));
      return res.status(200).json(userFound)
    })
    .catch(err => console.log(err));
    
     });`

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea