数据库结构是;
{ "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 :(得分: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的文档。