nodejs node mongoclient findone collection javascript mongodb node.js

javascript - mongoclient - node.js mongodb select document by_id node-mongodb-native



node js model find (6)

Acabo de utilizar este código en la aplicación Node.js en el archivo de controlador, 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 está utilizando el cifrado de sus contraseñas con bcrypt con "preservar", asegúrese de no cifrar la contraseña después de cada modificación del registro en DB.

Intento seleccionar un documento por ID

He intentado:

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

También probado:

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

Esto me da un error de 500 ...

var mongo = require(''mongodb'') var BSON = mongo.BSONPure; var o_id = new BSON.ObjectID(theidID ); collection.update({ _id: o_id }

Ninguno de estos funciona ¿Cómo seleccionar por _id?


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);


Este es el enfoque que funcionó 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); }); }); }


La respuesta depende del tipo de variable que está pasando como ID. Saqué una identificación de objeto haciendo una consulta y almacenando mi account_id como el atributo ._id. Usando este método, simplemente consultas utilizando la id de mongo.

// 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(); } } ) } })

});


ahora puedes usar esto:

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

Puedes ver la documentación here


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