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

Moongooseの集計$matchがIDと一致しません

    あなたのids 変数は、ObjectIdではなく、「文字列」で構成されます。 値。

    ObjectIdのマングースの「自動キャスト」文字列値 通常のクエリでは正しいタイプに変換されますが、問題#1399で説明されているように、これは集約パイプラインでは発生しません。

    代わりに、手動で入力するには正しいキャストを行う必要があります:

    ids = ids.map(function(el) { return mongoose.Types.ObjectId(el) })
    

    その後、パイプラインステージでそれらを使用できます:

    { "$match": { "_id": { "$in": ids } } }
    

    その理由は、集約パイプラインが「通常」ドキュメント構造を変更するためです。したがって、マングースは、「スキーマ」が特定のパイプラインステージのドキュメントに適用されるとは想定していません。

    $matchの場合の「最初の」パイプラインステージは議論の余地があります 実際にドキュメントは変更されていないため、ステージはこれを行う必要があります。しかし、今のところ、これはそれがどのように起こるかではありません。

    「文字列」である可能性がある値、または少なくとも正しいBSONタイプではない可能性のある値は、一致させるために手動でキャストする必要があります。



    1. MongoDB-配列要素を更新またはプッシュするための$set

    2. RailsPumaのRedis接続が不足しています

    3. MongoDB ::Mongo IDはコレクション全体で一意ですか?

    4. NodejsとD3をリアルタイムで使用して地図上に州の名前をプロットする