执行相同的查询会在nodejs中出现“FailedToParse”错误

时间:2017-04-25 14:54:38

标签: node.js mongodb mongodb-query

数据库结构是;

{ "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);
        }
    });
   }
])

1 个答案:

答案 0 :(得分:1)

我不知道为什么你确实包含了有效的mongo shell行,但是没有包含失败的Node行 - 这在这里会更加相关。

在任何情况下,Node的本机Mongo驱动程序(我假设你在这里使用)的工作方式与Mongo shell完全不同,所以不要指望它的工作原理相同。

Mongo shell按顺序执行所有操作。在Node中,您必须使用回调或承诺进行流控制,而不是在Mongo shell中进行。您访问集合的方式也存在一些差异。在Mongo shell中,您通常使用db.collectionName。同样在Mongo shell中,您可以预定义一些内容,例如与对象ID相关的函数。最后,Mongo使用BSON作为数据,在Node中使用JavaScript对象文字(更像JSON但不太严格)。 Node使用V8加上附加功能,Mongo shell使用SpiderMonkey,没有Node中可用的功能。这一切都会产生微妙的差异。

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