2017-04-25 45 views
0

数据库结构是;执行相同的查询会在nodejs中给出“FailedToParse”错误

{ "key" : "test" } 
{ "key" : "test" } 
{ "key" : "test" } 
{ "key" : "test" } 

在mongoshell查询,

db.collectionName.find({}, {key: 1, _id: 0}) 

列出的文件。

但是,当我在nodejs中运行相同的查询时,它给我一个错误;

{ 
    "name": "MongoError", 
    "message": "Failed to parse: comment: 1. 'key' field must be of BSON type string.", 
    "ok": 0, 
    "errmsg": "Failed to parse: comment: 1. 'key' field must be of BSON type string.", 
    "code": 9, 
    "codeName": "FailedToParse" 
} 

我不明白可能是什么问题?

我知道这个问题没有意义,但是,毫无意义地,这就是我所拥有的。是关于mongo版本还是什么?

编辑:你写的Node.js代码是正确的,所以这里是查询内部的一个async.series调用;

async.series([ 
    function(callback){ 
    db.collection("collectionName").find({}, {key: 1, _id: 0}).toArray(function(err, result){ 
     if(err){ 
      callback(err); 
     } else{ 
      callback(null, result); 
     } 
    }); 
    } 
]) 
+0

请显示您的代码,而不仅仅是查询。 – str

+0

我刚编辑我的问题。 – mmu36478

+0

这是不完整的。什么是数据库?你在使用猫鼬吗? – str

回答

1

我不知道为什么你没有包括工作,但不包括发生故障的节点线蒙戈外壳线 - 这将是更相关的。

在任何情况下,Node的本地Mongo驱动程序(我假设您在这里使用的)的工作方式与Mongo shell完全不同,因此不要期望它的工作方式相同。

Mongo shell按顺序执行所有操作。在Node中,您必须使用回调或承诺来进行流量控制,而您在Mongo shell中不会这样做。您访问收藏的方式也存在一些差异。在Mongo shell中,您通常使用db.collectionName。同样在Mongo shell中,您还有一些预定义的东西,例如与对象id相关的函数。最后,Mongo使用BSON来处理数据,在Node中使用JavaScript对象文字(更像JSON,但不太严格)。节点使用V8加上额外的功能,而Mongo shell使用SpiderMonkey,没有Node中可用的功能。这一切都有微妙差异的后果。

您没有包含失败的节点线路,因此没有人能够修复该线路。但是你肯定需要看看它,看看你是否在关注你正在使用的Mongo驱动程序或ODM的文档。

+0

谢谢你的回答先生。 RSP。我刚刚编辑了我的问题。 – mmu36478