Próbuję wybrać dokument według identyfikatora
Próbowałem:
collection.update({ "_id": { "$oid": + theidID } }
collection.update({ "_id": theidID }
collection.update({ "_id.$oid": theidID }}
Próbowałem również:
collection.update({ _id: new ObjectID(theidID ) }
To daje mi błąd 500 ...
var mongo = require('mongodb')
var BSON = mongo.BSONPure;
var o_id = new BSON.ObjectID(theidID );
collection.update({ _id: o_id }
Żadne z tych nie działa. Jak wybierać według _id?
javascript
mongodb
node.js
znak
źródło
źródło
collection.find({"_id": ObjectId(theidID)})
powinno działać.Odpowiedzi:
var mongo = require('mongodb'); var o_id = new mongo.ObjectID(theidID); collection.update({'_id': o_id});
źródło
native_parser:false
- sprawdź odpowiedź Raphaela poniżejObjectID()
w sprawierequire('mongodb')
, a nierequire('mongodb').MongoClient
mongoClient.ObjectID is not a constructor
błąd.To podejście, które zadziałało dla mnie.
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); }); }); }
źródło
teraz możesz po prostu użyć tego:
var ObjectID = require('mongodb').ObjectID; var o_id = new ObjectID("yourObjectIdString"); .... collection.update({'_id': o_id});
Możesz zobaczyć dokumentację tutaj
źródło
Z
native_parser:false
:var BSON = require('mongodb').BSONPure; var o_id = BSON.ObjectID.createFromHexString(theidID);
Z
native_parser:true
:var BSON = require('mongodb').BSONNative; var o_id = BSON.ObjectID.createFromHexString(theidID);
źródło
Właśnie użyłem tego kodu w aplikacji Node.js w pliku kontrolera i działa:
var ObjectId = require('mongodb').ObjectId; ... User.findOne({_id:ObjectId("5abf2eaa1068113f1e")}) .exec(function(err,data){ // do stuff })
nie zapomnij wcześniej zainstalować "mongodb", a jeśli używasz szyfrowania haseł za pomocą bcrypt z "presave", upewnij się, że nie będziesz szyfrować hasła po każdej modyfikacji rekordu w DB.
źródło
/* get id */ const id = request.params.id; // string "5d88733be8e32529c8b21f11" /* set object id */ const ObjectId = require('mongodb').ObjectID; /* filter */ collection.update({ "_id": ObjectId(id) } )
źródło
Odpowiedź zależy od typu zmiennej, którą przekazujesz jako identyfikator. Pobrałem identyfikator obiektu, wykonując zapytanie i zapisując mój identyfikator_konta jako atrybut ._id. Korzystając z tej metody, wystarczy wykonać zapytanie przy użyciu identyfikatora 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(); } } ) } })
});
źródło
To właśnie zadziałało dla mnie. Korzystanie z mongoDB
const mongoDB = require('mongodb')
Następnie na dole, gdzie wykonuję połączenie ekspresowe.
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)); });`
źródło
Jeśli używasz Mongosee, możesz uprościć tę funkcję
FindById:
to zamienić w mongodb:
"_id" : ObjectId("xyadsdd434434343"),
example: // find adventure by id and execute Adventure.findById('xyadsdd434434343', function (err, adventure) {});
https://mongoosejs.com/docs/api.html#model_Model.findById
źródło
Używam
"mongodb": "^3.6.2"
wersji klienta i serwera4.4.1
// where 1 is your document id const document = await db.collection(collection).findOne({ _id: '1' }) console.log(document)
Jeśli chcesz skopiować i wkleić, oto wszystko, czego potrzebujesz.
const { MongoClient } = require('mongodb') const uri = '...' const mongoDb = '...' const options = {} ;(async () => { const client = new MongoClient(uri, options) await client.connect() const db = client.db(mongoDb) const document = await db.collection(collection).findOne({ _id: '1' }) console.log(document) )}()
źródło