2017-04-25 109 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