私のアプリは、毎日さまざまなサイズのウェブページのスクリーンショットを取ります。ページとスクリーンサイズはジョブに設定されています。各ジョブは、キャプチャするページの配列と、それらの各ページをキャプチャするスクリーンサイズのリストを指定します。MongoDBの一致条件の最初の項目を選択
アプリが起動するたびに、毎日のスクリーンショットをまだ撮っていない場合に備えて、自動的にアクティブなジョブごとにすべてのスクリーンショットが再度取り込まれます。つまり、同じ仕事、ページ、スクリーンサイズのスクリーンショットを同じ日に2回以上表示することができます。
スクリーンショットを表示するときは、同じjob
,page
、およびscreensize
のプロパティを1回だけ返すことができます。これを行うには、毎日実行されるクエリを作成し、その日に複数回のショットがあるかどうかを確認する必要があります。存在する場合は、最初にdateTaken
プロパティを持つもののみを返します。
これには$group
を使用する必要があるかどうかわかりません。私は$group
でいくつかの異なるクエリを試しましたが、すべてのショットを1つの結果にまとめたり、撮影日に関係なくすべてのスクリーンショットを返しました。
ここでは、スクリーンショットスキーマです:要するに
const ScreenshotSchema = new Schema({
job: {
type: Schema.Types.ObjectId,
ref: 'Job',
required: true
},
dateTaken: {
type: Date,
required: true
},
page: {
type: Schema.Types.ObjectId,
ref: 'Page',
required: true
},
screensize: {
type: Schema.Types.ObjectId,
ref: 'Screensize',
required: true
}
});
は私が必要なものは、次のとおりです。仕事、ページ、画面サイズと日のユニークな組み合わせごとに1つの項目
:これは、その後
$first
オペレータと最新ショットを選ぶ、$group
前降順$sort
を使用することによって達成することができますユニークな組み合わせごとに1つの結果が返されますが、ユニークな組み合わせにつき1日*が必要です。 – Aronこんにちはアロン、私は一日ごとにグループ化するためのグループ化キーを追加しました。 –
はい、それはうまくいくようです!今、 '.find({}) 'のようにScreenshotドキュメントのリストを取得するための方法はありますか?) 'shot'オブジェクトをラップするドキュメントを取り除くために後処理を追加する必要はありません – Aron