sql >> データベース >  >> NoSQL >> MongoDB

マングース:CastError:パス_idの値[オブジェクトオブジェクト]のObjectIdへのキャストに失敗しました

    簡単な答え: mongoose.Types.ObjectIdを使用してください 。

    Mongoose(mongoではない)はオブジェクトIDを文字列として受け入れ、適切に「キャスト」できるため、次を使用するだけです。

    MyClass.findById(req.params.id)
    

    ただし、注意点はreq.params.idの場合です。 はmongoID文字列の有効な形式ではないため、キャッチする必要のある例外がスローされます。

    したがって、理解すべき主な紛らわしいことは、mongoose.SchemaTypes マングーススキーマとmongoose.Typesを定義するときにのみ使用するものがあります データベースまたはクエリオブジェクトに格納するデータオブジェクトを作成するときに使用するものがあります。したがって、mongoose.Types.ObjectId("51bb793aca2ab77a3200000d") 動作し、データベースに保存したりクエリで使用したりできるオブジェクトを提供し、無効なID文字列が指定された場合は例外をスローします。

    findOne クエリオブジェクトを受け取り、単一のモデルインスタンスをコールバックに渡します。そしてfindById 文字通りfindOne({_id: id})のラッパーです (ここのソースコードを参照してください)。 findだけ クエリオブジェクトを受け取り、一致するモデルインスタンスの配列をコールバックに渡します。

    ゆっくり行くだけです。紛らわしいですが、この時点で混乱していて、マングースのバグにぶつかっていないことを保証できます。かなり成熟したライブラリですが、コツをつかむには時間がかかります。

    スニペットに表示されるもう1つの疑わしい点は、newを使用していないことです。 ChildClassをインスタンス化するとき 。それを超えて、残っているCastErrorを追跡できるように、スキーマコードを投稿する必要があります。



    1. Redisがシングルスレッドの場合、どうしてこんなに速くなるのでしょうか?

    2. Redisのインストール方法

    3. Mongodb Aggregation Framework:$ groupはインデックスを使用しますか?

    4. 値を持つキーをどのように検索しますか?たとえば、値がsomevalueであるすべてのKEYSを取得します