node.js मोंगोडब _id नोड-मोंगोडब-देशी द्वारा दस्तावेज़ का चयन करें


91

मैं आईडी द्वारा एक दस्तावेज का चयन करने की कोशिश कर रहा हूं

मैंने कोशिश की:

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

collection.update({ "_id": theidID }

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

यह भी आज़माया:

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

यह मुझे एक त्रुटि 500 ​​देता है ...

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

collection.update({ _id: o_id }

इनमें से कोई काम नहीं करता। _Id का चयन कैसे करें?


1
collection.find({"_id": ObjectId(theidID)})कार्य करना चाहिए।
बर्नी हैकेट

@ Bugai13 मैंने हार मान ली और हर डॉक्टर के लिए एक कस्टम आईडी असाइन करना समाप्त कर दिया।
मार्क

मुझे इसके लिए एक चयन / खोज (अद्यतन नहीं, यहां तक ​​कि) की आवश्यकता है। कोइ भाग्य?
स्ट्रैजर

यदि आपके पास सही धारावाहिक का संदर्भ नहीं है तो यह काम नहीं करेगा।
MK_Dev

@BernieHackett यह विधि mongodb संस्करण 3.4 के साथ नोड रनटाइम 12.13 के लिए काम नहीं करती है। यह यहाँ बताई गई त्रुटि stackoverflow.com/questions/26453507/…
Kuse Hettiarachchi

जवाबों:


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

1
वर्ष 2016 - अभी भी ठीक काम करता है। यदि आपके पास कोई native_parser:false
माबाई नहीं है

2
यह काम। सुनिश्चित करें कि आप बुला रहे हैं ObjectID()पर require('mongodb')और नहीं परrequire('mongodb').MongoClient
एलेक हे

इस तरह मुझे mongoClient.ObjectID is not a constructorत्रुटि हुई।
सचिन शाह

2 घंटे के प्रयास के बाद, अंत में मैंने आपको जवाब दिया, बहुत बहुत धन्यवाद।
शिव

73

यह दृष्टिकोण जो मेरे लिए काम करता है।

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

19

अब आप इसका उपयोग कर सकते हैं:

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

आप यहाँ प्रलेखन देख सकते हैं


12

के साथ native_parser:false:

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

के साथ native_parser:true:

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

7

मैंने अभी इस कोड को कंट्रोलर फाइल में Node.js ऐप में इस्तेमाल किया है, और यह काम करता है:

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

पहले "मोंगोडब" स्थापित करना न भूलें, और यदि आप "प्रिस्वे" के साथ bcrypt के साथ अपने पासवर्ड के एन्क्रिप्शन का उपयोग कर रहे हैं, तो सुनिश्चित करें कि आप DB में रिकॉर्ड के प्रत्येक संशोधन के बाद पासवर्ड एन्क्रिप्ट नहीं करेंगे।


2
/* get id */
const id        = request.params.id; // string "5d88733be8e32529c8b21f11"

/* set object id */
const ObjectId  = require('mongodb').ObjectID;

/* filter */
collection.update({ 
    "_id": ObjectId(id)
} )

1

उत्तर उस प्रकार पर निर्भर करता है जो आप आईडी के रूप में पास कर रहे हैं। मैंने एक क्वेरी करके और अपना खाता_id ._id विशेषता के रूप में संग्रहीत करके एक ऑब्जेक्ट आईडी खींची। इस विधि का उपयोग करके आप केवल मोंगो आईडी का उपयोग करके क्वेरी करते हैं।

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

});


1

इसी से मेरा काम बना है। MongoDB का उपयोग करना

const mongoDB = require('mongodb')

फिर नीचे की तरफ जहां मैं अपना एक्सप्रेस कॉल कर रहा हूं।

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

 });`

0

यदि आप Mongosee का उपयोग करते हैं, तो आप फ़ंक्शन को सरल बना सकते हैं

FindById:

यह मंगोलगढ़ में प्रतिस्थापित: "_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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.