node.js mongodb _id নোড-মোংডব-নেটিভ দ্বারা নথি নির্বাচন করুন


96

আমি আইডি দ্বারা একটি নথি নির্বাচন করার চেষ্টা করছি

আমি চেষ্টা করেছিলাম:

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 }

এগুলির কোনওটিই কাজ করে না। _আইডি দ্বারা কীভাবে নির্বাচন করবেন?


4
collection.find({"_id": ObjectId(theidID)})কাজ করা উচিত.
বার্নি হ্যাকেট 4'11

@ বুগাই 13 আমি ছেড়ে দিয়েছি এবং প্রতিটি নথির জন্য একটি কাস্টম আইডি নির্ধারণ করেছি।
চিহ্নিত করুন

আমার এটি নির্বাচন / সন্ধানের জন্য প্রয়োজন (কোনও আপডেট নয়, এমনকি)। যেকোন ভাগ্য?
স্টারগার

আপনার কাছে সঠিক সিরিয়ালাইজের রেফারেন্স না থাকলে এটি কাজ করবে না।
এমকে_দেব

@ বার্নিহ্যাকেটটি এই পদ্ধতিটি নং রানটাইম 12.13 এর জন্য মঙ্গডব সংস্করণ 3.4 সহ কাজ করে না। এটি এখানে বর্ণিত ত্রুটি দেয় stackoverflow.com/questions/26453507/…
কুসাল হেত্তিয়ারাছি

উত্তর:


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

4
বছর 2016 - এখনও ঠিক আছে। থাকলে কোনো maby আপনি ছিল native_parser:false- নিচের চেক রাফায়েল উত্তর
fider

4
এইটা কাজ করে. নিশ্চিত হয়ে নিন যে আপনি কল ObjectID()করছেন require('mongodb')এবং না চালু আছেনrequire('mongodb').MongoClient
অ্যালেক ও

এইভাবে আমি mongoClient.ObjectID is not a constructorত্রুটি পেয়েছি ।
শচীন শাহ

2 ঘন্টা চেষ্টা করার পরে, অবশেষে আমি আপনাকে উত্তর দিয়েছিলাম এটি উত্তর, ধন্যবাদ অনেক মানুষ।
শিব

74

এটি আমার পক্ষে কাজ করেছে।

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

22

এখন আপনি কেবল এটি ব্যবহার করতে পারেন:

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

9

আমি সবেমাত্র এই কোডটি নিয়ামক ফাইলে নোড.জেএস অ্যাপে ব্যবহার করেছি এবং এটি কাজ করে:

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

"মোঙ্গোডব" ইনস্টল করার আগে ভুলে যাবেন না এবং আপনি যদি "পাসেভ" দিয়ে বিসিআরপি দিয়ে আপনার পাসওয়ার্ডগুলির এনক্রিপশন ব্যবহার করেন তবে নিশ্চিত হয়ে নিন যে আপনি ডিবিতে রেকর্ডের প্রতিটি পরিবর্তনের পরে পাসওয়ার্ড এনক্রিপ্ট করবেন না।


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

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

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

1

উত্তরটি আপনি যে চলক ধরণের আইডি হিসাবে পাস করছেন তার উপর নির্ভর করে। আমি একটি কোয়েরি করে এবং আমার অ্যাকাউন্ট_আইডি ._আইডি বৈশিষ্ট্য হিসাবে সঞ্চয় করে একটি অবজেক্ট আইডি টানলাম। এই পদ্ধতিটি ব্যবহার করে আপনি কেবল মঙ্গো আইডি ব্যবহার করে জিজ্ঞাসা করছেন।

// 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

এটিই আমার পক্ষে কাজ করেছিল। মঙ্গোডিবি ব্যবহার করা

const mongoDB = require('mongodb')

তারপরে নীচে যেখানে আমি আমার এক্সপ্রেসকে কল করব get

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

আপনি যদি মঙ্গোজি ব্যবহার করেন তবে আপনি ফাংশনটি সহজ করতে পারেন

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


0

আমি ক্লায়েন্ট "mongodb": "^3.6.2"এবং সার্ভার সংস্করণ ব্যবহার করছি4.4.1

// where 1 is your document id
const document = await db.collection(collection).findOne({ _id: '1' })
console.log(document)

আপনি যদি কপি এবং পেস্ট করতে চান তবে আপনার যা প্রয়োজন তা এখানে আছে।

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)
)}()
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.