在mongodb中,db.collection.find()的返回类型是什么?
在mongodb中,db.collection.find()的返回类型是什么?
我正在尝试读取来自mongodb连接的find函数的输出。\n我想将数据库的结果存储为JSON/Array,命名为result,如下所示:\n
collection= db.collection('users'); result =collection.find()。
\n目前使用这段代码,我得到了一些奇怪的长json输出:\n
{ db: { domain: null, _events: {}, _maxListeners: 10, databaseName: 'askr', serverConfig: { domain: null, _events: [Object], _maxListeners: 10, auth: [Getter], _callBackStore: [Object], _commandsStore: [Object], _dbStore: [Object], options: [Object], _serverState: 'connected', _haProcess: [Object], servers: [Object], strategyInstance: [Object], emitOpen: false, _state: [Object], _currentServerChoice: 0, socketTimeoutMS: [Getter/Setter], _used: true, logger: [Object] }, options: { read_preference_tags: null, read_preference: 'primary', url: 'mongodb://vishal:admin@ds055680.mongolab.com:55680/askr', native_parser: true, readPreference: [Object], safe: false, w: 1 }, _applicationClosed: false, slaveOk: false, bufferMaxEntries: -1, native_parser: true, bsonLib: { BSON: [Object], Long: [Object], ObjectID: [Object], DBRef: [Object], Code: [Object], Timestamp: [Object], Binary: [Object], Double: [Object], MaxKey: [Object], MinKey: [Object], Symbol: [Object] }, bson: { promoteLongs: true }, bson_deserializer: { Code: [Object], Symbol: [Object], BSON: [Object], DBRef: [Object], Binary: [Object], ObjectID: [Object], Long: [Object], Timestamp: [Object], Double: [Object], MinKey: [Object], MaxKey: [Object], promoteLongs: true }, bson_serializer: { Code: [Object], Symbol: [Object], BSON: [Object], DBRef: [Object], Binary: [Object], ObjectID: [Object], Long: [Object], Timestamp: [Object], Double: [Object], MinKey: [Object], MaxKey: [Object], promoteLongs: true }, _state: 'connected', pkFactory: { [Function: ObjectID] index: 14533369, createPk: [Function: createPk], createFromTime: [Function: createFromTime], createFromHexString: [Function: createFromHexString], isValid: [Function: isValid], ObjectID: [Circular], ObjectId: [Circular] }, forceServerObjectId: false, safe: false, notReplied: {}, isInitializing: true, openCalled: true, commands: [], logger: { error: [Function], log: [Function], debug: [Function] }, tag: 1426645764322, eventHandlers: { error: [], parseError: [], poolReady: [], message: [], close: [] }, serializeFunctions: false, raw: false, recordQueryStats: false, retryMiliSeconds: 1000, numberOfRetries: 60, readPreference: { _type: 'ReadPreference', mode: 'primary', tags: undefined } }, collection: { db: { domain: null, _events: {}, _maxListeners: 10, databaseName: 'askr', serverConfig: [Object], options: [Object], _applicationClosed: false, slaveOk: false, bufferMaxEntries: -1, native_parser: true, bsonLib: [Object], bson: [Object], bson_deserializer: [Object], bson_serializer: [Object], _state: 'connected', pkFactory: [Object], forceServerObjectId: false, safe: false, notReplied: {}, isInitializing: true, openCalled: true, commands: [], logger: [Object], tag: 1426645764322, eventHandlers: [Object], serializeFunctions: false, raw: false, recordQueryStats: false, retryMiliSeconds: 1000, numberOfRetries: 60, readPreference: [Object] }, collectionName: 'users', internalHint: null, opts: {}, slaveOk: false, serializeFunctions: false, raw: false, readPreference: { _type: 'ReadPreference', mode: 'primary', tags: undefined }, pkFactory: { [Function: ObjectID] index: 14533369, createPk: [Function: createPk], createFromTime: [Function: createFromTime], createFromHexString: [Function: createFromHexString], isValid: [Function: isValid], ObjectID: [Circular], ObjectId: [Circular] }, serverCapabilities: undefined }, selector: {}, fields: undefined, skipValue: 0, limitValue: 0, sortValue: undefined, hint: null, explainValue: undefined, snapshot: undefined, timeout: true, tailable: undefined, awaitdata: undefined, oplogReplay: undefined, numberOfRetries: 5, currentNumberOfRetries: 5, batchSizeValue: 0, raw: false, readPreference: { _type: 'ReadPreference', mode: 'primary', tags: undefined }, returnKey: undefined, maxScan: undefined, min: undefined, max: undefined, showDiskLoc: undefined, comment: undefined, tailableRetryInterval: 100, exhaust: false, partial: false, slaveOk: false, maxTimeMSValue: undefined, connection: undefined, transforms: undefined, totalNumberOfRecords: 0, items: [], cursorId: { _bsontype: 'Long', low_: 0, high_: 0 }, dbName: undefined, state: 0, queryRun: false, getMoreTimer: false, collectionName: 'askr.users' }
问题的出现原因:
问题的出现是因为作者正在尝试使用Mondodb Client来执行查询操作,但是不清楚db.collection.find()
方法的返回类型是什么。
解决方法:
为了解决这个问题,可以查看官方文档或者其他资源,以获取有关db.collection.find()
方法的返回类型的信息。这样,作者就可以知道如何正确地使用返回的结果进行后续操作。
以下是解决方法的代码示例:
const MongoClient = require('mongodb').MongoClient; const url = 'mongodb://localhost:27017'; const dbName = 'myproject'; MongoClient.connect(url, function(err, client) { console.log("Connected successfully to server"); const db = client.db(dbName); const collection = db.collection('mycollection'); // 使用db.collection.find()方法进行查询 const cursor = collection.find({}); // 打印查询结果的类型 console.log(typeof cursor); // 输出结果应该是object client.close(); });
希望通过上述代码示例,作者可以获取到db.collection.find()
方法的返回类型,并可以继续进行后续操作。
在MongoDB中,db.collection.find返回一个Cursor,它是一个指向查询结果集的指针。客户端可以通过迭代Cursor来检索结果。默认情况下,Cursor在10分钟的不活动后会超时。
如果你想要存储find()的结果,可以对其进行迭代。例如:
collection = db.collection('users'); result = collection.find().forEach(function(item){ //这里的item是记录,即你要对每条记录进行的操作。 })
需要将.forEach更改为.each,为什么呢?我是指的来自MongoDB的cursor.forEach方法;参见这里:docs.mongodb.org/manual/reference/method/cursor.forEach。
但是我得到了一个异常,显示"Object #<Cursor> has no method 'forEach'"。当我将forEach更改为.each,就没有问题了。
在这种情况下,我想知道你在Node中使用的npm模块是什么。因为Object.prototype.forEach也是标准的JavaScript函数。
var MongoClient = require('mongodb').MongoClient;
这似乎是对forEach的模块覆盖。无论如何,MongoDB的实现是通过collection.find({}).toArray(function(err, docs) { //docs是整个数组 });来实现的。更多信息请参见:npmjs.com/package/mongodb#find-all-documents
让我们在聊天中继续讨论。