2016-07-10 2 views
5

में मैं नोड में इस तरह एक त्रुटि हो रही थी: जब MongoDB के साथ एक खोज कार्रवाई करतेकुछ MongoDB ObjectID के साथ "तर्क एक स्ट्रिंग होनी चाहिए" Node.js

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

स्थिति ObjectID के के कुछ ऐसे उपयोग कर रहे थे। ऑब्जेक्ट आईडी के कुछ उपयोगों ने इस त्रुटि को उठाया और कुछ नहीं किया। एकमात्र चीज जो परिपक्व थी वह ऑब्जेक्ट आईडी से आया था। अगर इसे किसी मौजूदा संग्रह से खींचा गया था, तो यह काम करता था। अगर मैंने इसे स्वयं बनाया (उदा।, ObjectID.createFromHexString का उपयोग करके), यह ऊपर के रूप में विफल रहा।

+0

मैं [ऑब्जेक्टआईड.क्रेटफ्रॉमहेक्सस्ट्रिंग 'विधि को [डॉक्स] में कहीं भी नहीं देख सकता (https://docs.mongodb.com/manual/reference/method/ObjectId/)। क्या आपने बस 'ऑब्जेक्टआईडी () ', उदाहरण की कोशिश की है 'var id = ObjectId (" 507f1f77bcf86cd799439011 ")'? – fracz

+0

https://mongodb.github.io/node-mongodb-native/api-bson-generated/objectid.html में 'createFromHexString'' के लिए खोजें। मैंने नीचे पोस्ट की समस्या को पोस्ट किया है। धन्यवाद। डाटाबेस संस्करण v3.0.7 Git संस्करण: nogitversion –

उत्तर

2

मैंने इसे ट्रैक करने में कई घंटे बिताए। Mongoose के उपयोग के लिए समस्या नीचे आ गई। मैं अपने कुछ संग्रहों के लिए मोंगोस स्कीमा का उपयोग कर रहा था और दूसरों के लिए मोंगोस का उपयोग नहीं कर रहा था। यहाँ मेरी समस्या पैदा करने वाले कोड युक्त फ़ाइल है:

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

समस्या निकला लाइन होने के लिए:

connectedDb = db; 

कहाँ db mongoose.connection था। यही है, मैं मोंगो डीबी कलेक्शन के लिए अपने डीबी के रूप में mongoose.connection का उपयोग कर रहा था जो मोंगोस का उपयोग नहीं कर रहा था। इससे अड़चन त्रुटियां हुईं। (! और अब तक काम कर): 2.1.6 के लिए

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

बदलें MongoDB संस्करण

संशोधित कोड इस प्रकार है।

+0

'--version' शो mongod। @ क्रिस प्रिंस –

+0

मैं 2.1.6 करने के लिए NodeJS की MongoDB मॉड्यूल संस्करण को बदल मतलब या 2.1.17.The संस्करण एक बग जब objectId बनाने है – Vainlyh

+0

मुझे यह समस्या भी थी, सिवाय इसके कि मैं मोंगोस का उपयोग नहीं कर रहा हूं। मेरे लिए समाधान mongodb चालक के संस्करण को बदलना था। मेरे मामले में 2.2.10 काम नहीं किया लेकिन 2.0.28 करता है। विशिष्ट बग रिपोर्ट का एक लिंक बहुत अच्छा होगा अगर किसी को यह पता चल जाए कि उसे कहां मिलना है ... – schmidlop

संबंधित मुद्दे