2016-07-10 17 views
5

Tôi đã nhận được một lỗi như thế này trong Node:"Đối số phải là một chuỗi" với một số MongoDB ObjectId trong Node.js

TypeError: Argument must be a string 
    at TypeError (native) 
    at Buffer.write (buffer.js:791:21) 
    at serializeObjectId 
    <snip> 

các điều kiện là một số công dụng của ObjectId khi thực hiện một thao tác tìm với MongoDB. Một số sử dụng của ObjectID đã nêu ra lỗi này và một số thì không. Điều duy nhất quan trọng là ObjectID đến từ đâu. Nếu nó được lấy từ một bộ sưu tập hiện có, nó đã hoạt động. Nếu tôi tự tạo bản thân (ví dụ: sử dụng ObjectID.createFromHexString), nó không thành công như trên.

+0

Tôi không thể thấy phương thức 'ObjectID.createFromHexString' ở bất kỳ đâu trong [tài liệu] (https://docs.mongodb.com/manual/reference/method/ObjectId/). Bạn đã thử chỉ đơn giản 'ObjectId ()', ví dụ: 'var id = ObjectId (" 507f1f77bcf86cd799439011 ")'? – fracz

+0

Tìm kiếm 'createFromHexString' trong https://mongodb.github.io/node-mongodb-native/api-bson-generated/objectid.html. Tôi đăng những gì hóa ra là vấn đề, dưới đây. Cảm ơn. –

Trả lời

2

Tôi đã dành vài giờ theo dõi bước này xuống. Vấn đề đã đến với việc tôi sử dụng Mongoose. Tôi đã sử dụng các lược đồ Mongoose cho một số Bộ sưu tập của tôi và không sử dụng Mongoose cho người khác. Dưới đây là file chứa mã vấn đề của tôi:

// Some common MongoDb operations and data. 

'use strict'; 

var MongoClient = require('mongodb').MongoClient; 
var assert = require('assert'); 
var logger = require('./Logger'); 

var mongoose = require('mongoose'); 
// TODO: Take this out for production. 
mongoose.set('debug, true'); 

var PSSharingInvitations = require('./PSSharingInvitations') 

var connectedDb = null; 

// Call this just once, at the start of the server. 
// TODO: Need better error handling when can't initially connect. Right now have an ugly looking error when Mongo is not already started and we try to start our server. 
exports.connect = function(mongoDbURL) { 
    MongoClient.connect(mongoDbURL, function(err, db) { 
     assert.equal(null, err); 
     if (!db) { 
      logger.error("**** ERROR ****: Cannot connect to MongoDb database!"); 
     } 
     else { 
      mongoose.connect(mongoDbURL); 
      var db = mongoose.connection; 
      db.on('error', console.error.bind(console, 'connection error:')); 
      db.once('open', function() { 
       // SCHEMA's 
       exports.SharingInvitation = PSSharingInvitations.buildSchema(mongoose); 

       logger.info("Mongoose: Connected to MongoDb database"); 
      }); 

      connectedDb = db; 
      logger.info("Mongo: Connected to MongoDb database"); 
     } 
    }); 
}; 

exports.db = function() { 
    return connectedDb; 
}; 

// Call this just once, when the server shuts down. 
exports.disconnect = function() { 
}; 

Vấn đề hóa ra là dòng:

connectedDb = db; 

đâu db là mongoose.connection. Tức là, tôi đang sử dụng mongoose.connection làm db của tôi cho các Bộ sưu tập MongoDB không sử dụng Mongoose. Điều này gây ra lỗi liên tục. (! Và cho đến nay làm việc)

Các sửa đổi mã như sau:

exports.connect = function(mongoDbURL) { 
    MongoClient.connect(mongoDbURL, function(err, db) { 
     assert.equal(null, err); 
     if (!db) { 
      logger.error("**** ERROR ****: Cannot connect to MongoDb database!"); 
     } 
     else { 
      connectedDb = db; 
      logger.info("Mongo: Connected to MongoDb database"); 

      mongoose.connect(mongoDbURL); 
      var connectedMongooseDb = mongoose.connection; 
      connectedMongooseDb.on('error', console.error.bind(console, 'connection error:')); 
      connectedMongooseDb.once('open', function() { 

       // SCHEMA's 
       exports.SharingInvitation = PSSharingInvitations.buildSchema(mongoose); 

       logger.info("Mongoose: Connected to MongoDb database"); 
      }); 
     } 
    }); 
}; 
4

Thay đổi phiên bản MongoDB đến 2.1.6.

+0

'mongod --version' hiển thị: phiên bản db v3.0.7 phiên bản git: nogitversion –

+0

Tôi muốn thay đổi phiên bản mô-đun mongodb của nút phiên bản thành 2.1.6 hoặc 2.1.17. Phiên bản có lỗi khi tạo objectID. @Chris Prince – Vainlyh

+0

Tôi cũng có vấn đề này ngoại trừ tôi không sử dụng mongoose. Giải pháp cho tôi là thay đổi phiên bản của trình điều khiển mongodb. Trong trường hợp của tôi 2.2.10 đã không làm việc nhưng 2.0.28 không. Một liên kết đến báo cáo lỗi cụ thể sẽ là tuyệt vời nếu bất cứ ai xảy ra để biết nơi để tìm thấy nó ... – schmidlop

Các vấn đề liên quan