2017-04-25 10 views
0

データベース構造は次のとおりです。 mongoshellクエリで同じクエリを実行すると、ノードに「FailedToParse」エラーが発生します

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

、ドキュメントを一覧表示します

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コールの中のクエリです。ここでははるかに関連するだろう - あなたが働いていたが、失敗したノードの行が含まれていなかったのmongoシェルラインが含まれなかった理由を私は知らない

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

これは不完全です。 'db'とは何ですか?あなたはMongooseを使っていますか? – str

答えて

1

いずれにしても、ここで使用していると思われるノード用のネイティブMongoドライバは、Mongoシェルとはまったく異なる方法で動作するため、同じ動作を期待していません。

Mongoシェルはすべてを順番に実行します。 Nodeでは、Mongoシェルでは実行しないコールバックやフロー制御を使用する必要があります。また、コレクションへのアクセス方法にはいくつかの違いがあります。 Mongoシェルでは通常db.collectionNameを使用します。また、Mongoシェルには、例えばオブジェクトIDに関連する関数のような、あらかじめ定義されたものがいくつかあります。そして最後にMongoはBSONをデータに使用し、NodeではJSONのようにJavaScriptのリテラルを使用します(厳密ではありません)。ノードはV8と追加の機能を使用し、MongoシェルはSpiderMonkeyを使用し、ノードで使用できる機能はありません。それは微妙な違いにすべて影響を与えます。

あなたは失敗したノード行を含めなかったので、誰もその行を修正できません。しかし、あなたは確かにそれを見て、あなたが使用しているMongoドライバやODMのマニュアルに従っているかどうかを確認する必要があります。

+0

あなたの答えに感謝します。 rsp。私はちょうど私の質問を編集しました。 – mmu36478

関連する問題