node.js mongodb chọn tài liệu theo _id node-mongodb-native


91

Tôi đang cố gắng chọn một tài liệu theo id

Tôi đã thử:

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

collection.update({ "_id": theidID }

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

Cũng đã thử:

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

Điều này mang lại cho tôi một lỗi 500 ...

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

collection.update({ _id: o_id }

Không có công việc nào trong số này. Làm thế nào để chọn theo _id?


1
collection.find({"_id": ObjectId(theidID)})nên làm việc.
Bernie Hackett

@ Bugai13 Tôi đã bỏ cuộc và kết thúc việc chỉ định ID tùy chỉnh cho mọi tài liệu.
Đánh dấu

Tôi cần cái này để chọn / tìm (thậm chí không phải cập nhật). Bất kỳ may mắn?
strager

Nó sẽ không hoạt động nếu bạn không có tham chiếu đến bộ nối tiếp phù hợp.
MK_Dev

@BernieHackett phương pháp này không hoạt động đối với thời gian chạy của nút 12.13 với mongodb phiên bản 3.4. Nó gây ra lỗi được mô tả ở đây stackoverflow.com/questions/26453507/…
Kusal Hettiarachchi

Câu trả lời:


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

1
Năm 2016 - vẫn hoạt động tốt. Nếu bạn không có maby nào native_parser:false- hãy kiểm tra câu trả lời của Raphael bên dưới
fider

2
Những công việc này. Hãy chắc chắn rằng bạn đang gọi ObjectID()trên require('mongodb')và không phải trênrequire('mongodb').MongoClient
Alec O

Bằng cách này, tôi đã mongoClient.ObjectID is not a constructorgặp lỗi.
Sachin Shah

Sau 2hrs cố gắng, cuối cùng tôi đã đóng đinh nó với bạn câu trả lời, cảm ơn rất nhiều người đàn ông.
Shiva

73

Đây là cách tiếp cận hiệu quả với tôi.

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

bây giờ bạn chỉ có thể sử dụng cái này:

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

Bạn có thể xem tài liệu tại đây


12

Với native_parser:false:

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

Với native_parser:true:

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

7

Tôi vừa sử dụng mã này trong ứng dụng Node.js trong tệp bộ điều khiển và nó hoạt động:

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

đừng quên cài đặt "mongodb" trước đó và nếu bạn đang sử dụng mã hóa mật khẩu của mình bằng bcrypt với "presave", hãy đảm bảo rằng bạn sẽ không mã hóa mật khẩu sau mỗi lần sửa đổi bản ghi trong 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

Câu trả lời phụ thuộc vào loại biến mà bạn đang chuyển vào làm id. Tôi đã lấy một id đối tượng bằng cách thực hiện truy vấn và lưu trữ account_id của mình dưới dạng thuộc tính ._id. Sử dụng phương pháp này, bạn chỉ cần truy vấn bằng id 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();    
        } 
      }
    )  
  } 
})

});


1

Đây là những gì làm việc cho tôi. Sử dụng mongoDB

const mongoDB = require('mongodb')

Sau đó, ở cuối nơi tôi đang thực hiện cuộc gọi nhận nhanh.

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

 });`

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.