0

MongoDB Compass Community 1.16.3aggregationを構築しようとしていますが、ステージのクエリと同時に奇妙な問題が発生しています。$matchObjectIdISODate

非稼働中の$matchステージ

{
  user_id: ObjectId("5c9168ec5530c90d0c5cd98a"),
  value: {$gte: 600},
  datetime: { $gte: ISODate("2019-02-01T00:00:00Z"), $lt: ISODate("2019-04-10T23:59:59Z") }
}

このクエリはまったく機能せず、コンパスが返されますExpected end of input but "}" found.

ここに画像の説明を入力

しかし、これらの$matchステージは機能します

{
  user_id: ObjectId("5c9168ec5530c90d0c5cd98a"),
  value: {$gte: 600}
}

パーフェクトな結果!

{
  value: {$gte: 600},
  datetime: { $gte: ISODate("2019-02-01T00:00:00Z"), $lt: ISODate("2019-04-10T23:59:59Z") }
}

パーフェクトな結果!

ObjectIdandISODateを同時に使うとクエリが動かないようです。それで、私はどこかで間違いを犯しましたか?それとも2$match段階に分ける必要がありますか?何かご意見は?

編集済み

$matchパイプラインを 2段階に分割すると(この例では削除valueしました) 、うまく機能しますが、それが適切な方法であり、効率的であるかどうかはわかりません。

[{
    $match: {
        user_id: ObjectId("5c9168ec5530c90d0c5cd98a")
    }
}, {
    $match: {
        datetime: {
            $gte: ISODate("2019-02-01T00:00:00Z"),
            $lt: ISODate("2019-04-01T00:00:00Z")
        }
    }
}]
4

1 に答える 1