node.js mongodb _id node-mongodb-native로 문서 선택


91

ID로 문서를 선택하려고합니다.

난 노력 했어:

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)})작동해야합니다.
Bernie Hackett

@ Bugai13 포기하고 모든 문서에 사용자 지정 ID를 할당했습니다.
Mark

선택 / 찾기를 위해 이것이 필요합니다 (업데이트도 아님). 운?
strager

올바른 직렬 변환기에 대한 참조가 없으면 작동하지 않습니다.
MK_Dev

@BernieHackett이 메서드는 mongodb 버전 3.4가있는 노드 런타임 12.13에서 작동하지 않습니다. 여기에 설명 된 오류를 제공합니다. stackoverflow.com/questions/26453507/…
Kusal Hettiarachchi

답변:


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

1
2016 년-여전히 정상적으로 작동합니다. 더 maby 당신은 없었다 경우 native_parser:false- 아래의 체크 라파엘 응답
FIDER

2
작동합니다. 있는지 확인 호출하는 ObjectID()require('mongodb')와하지에require('mongodb').MongoClient
알렉 O

이런 식으로 mongoClient.ObjectID is not a constructor오류 가 발생했습니다.
Sachin Shah

2 시간의 시도 후 마침내 나는 당신의 대답으로 그것을 못 박았습니다.
Shiva

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

이전에 "mongodb"를 설치하는 것을 잊지 마시고, "presave"를 사용하여 bcrypt로 비밀번호를 암호화하는 경우 DB의 레코드를 수정할 때마다 비밀번호를 암호화하지 않도록주의하십시오.


3
/* 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로 전달하는 변수 유형에 따라 다릅니다. 쿼리를 수행하고 account_id를 ._id 속성으로 저장하여 개체 ID를 가져 왔습니다. 이 방법을 사용하면 mongo 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));

 });`

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.