我当前的问题是使用db.collection.find()mongoose命令。我对mongoose / mongodb比较新,但我已经掌握了它的概念。这是我一直试图运行的测试代码:
mongoose.connect(url);
function main()
{
var db = mongoose.connection;
db.on('open', function() {
db.collection('Tweet').find({id: 631460910368956400}, function (err, data){
console.log(data);
})
/*var coll = db.collection('Tweet');
db.collection('Tweet').findOne({id: 631460910368956400},function (err, ret) {
if(err) console.log(err);
console.log(ret['id']);
//db.close();
});*/
});
}
main();
从未注释掉的字段返回的数据是一个奇怪的对象:
{ connection: null,
server: null,
disconnectHandler:
{ s: { storedOps: [], storeOptions: [Object], topology: [Object] },
length: [Getter] },
bson: {},
ns: 'TEST.Tweet',
cmd: { find: 'TEST.Tweet', limit: 0, skip: 0, query: {}, slaveOk: false },
options:
{ skip: 0,
limit: 0,
raw: undefined,
hint: null,
timeout: undefined,
slaveOk: false,
db:
{ domain: null,
_events: [Object],
_maxListeners: undefined,
s: [Object],
serverConfig: [Getter],
bufferMaxEntries: [Getter],
databaseName: [Getter],
等等......它会持续更长时间。
IP地址是成功连接的远程连接。我可以做一些事情,比如添加和删除文档,但实际上无法从javascript中查看文档。我知道它是由于某种异步问题引起的,但是我不确定如何修复它。此外,.findOne()的注释掉的代码似乎在上面的代码中完全提取数据。
.find()函数的代码有什么问题?解释为什么数据检索中的当前错误也会很好。
感谢您的帮助!
答案 0 :(得分:4)
您收到的对象是Cursor
,它是用于检索实际结果的对象。
当您确定您的查询永远不会返回多个对象时(例如,在这种情况下,您通过始终唯一的_id
字段进行查询),您可以使用db.collection('Tweet').findOne(
来返回该对象没有额外的间接层。
但是当您的查询可能返回多个文档时,您需要使用游标。要解析光标,可以使用cursor.toArray
:
db.collection('Tweet').find({}, function (err, cursor){
cursor.toArray().forEach(function(doc) {
console.log(doc);
});
})
这是最简单的版本。有关游标的更多信息,请参阅上面链接的文档。
顺便说一句:到目前为止,您只使用了本机驱动程序的功能。如果要使用Mongoose查询对象,可能需要使用Mongoose模型对象的方法。