1

別のコレクションのコレクション、一意のユーザー名またはデフォルトの _id (オブジェクト ID)、または新しいレコードが挿入されたときに増加する通常の ID を参照するにはどうすればよいですか。オブジェクト ID が mongoose のパフォーマンスを向上させることを読みましたが、_ids を使用してレコードを取得できず、エラー INVALID OBJECT ID が発生しました。username などの他のキーを使用して取得するときにエラーが発生しません。しかし、_id がパフォーマンスを向上させるので、私はそれを使用しようとしています。

  Model.find({_id : "idstring"})

schema を定義する際に、これらの 2 つの方法を試しました。

1) _id は自動的に作成されるため、定義はありません。

2) _id を次のように定義しました: _id : { type : Schema.ObjectId }

どちらの方法でも、レコードを取得するときに「無効なオブジェクト ID」というエラーが表示されます

ありがとう

4

2 に答える 2

2

文字列から ObjectID を作成する必要があります

 var ObjectId = require('mongoose').Types.ObjectId;
 var myObjectId = ObjectId.fromString('myhexstring');
于 2012-04-17T07:58:10.993 に答える
0

1) と 2) は同じことをします。1) を選択して、マングースに任せたほうがよいでしょう。

必ずしもパフォーマンスについてはわかりません。_id フィールドは mongodb によって一意にインデックス付けされるだけなので、クエリのパフォーマンス向上はそれによるものです。クエリが遅い場合は、必要な他のフィールドにいつでもインデックスを付けることができます。確かに _id の方が使いやすいです。

INVALID OBJECT ID エラーは、mongoose が ObjectId にキャストできない何かが渡されたことが原因です。16 進文字列または mongoose.Types.ObjectId のインスタンスを渡すことができます。16 進文字列の長さは 24 文字にする必要があります。この値を再確認してください。

また、文字列の ObjectId への明示的なキャストは自動的に行われるため、手動で行う必要はありません。

于 2012-04-18T00:06:27.303 に答える