1

私はSQLの世界から来ましたが、MongoDBのクエリをまだ学んでいますが、この問題に直面しました...

設定:

一連の会議があるStudentコレクションがあります

student: {
  meetings: [
    {time: x},
    {time: y},
    {time: z}
  ]
}

会議配列には動的なサイズがあり、その要素はascで時間順に並べ替えられているため、配列内の最初の会議の時間が最も早くなります。

一定時間後に最初の会議が始まるすべての学生を取得するために、次の方法でクエリを実行できます。

db.students.find( { "meetings.0.time": {$gt: ISODate()} } )

質問:

また、最後の会議が特定の時間より前に開始されたすべての学生を取得するためにクエリを実行する必要があります。ただし、以下は機能しませんでした。

db.students.find( { "meetings.-1.time": {$lt: ISODate()} } )

この問題をどのように解決しますか?

4

1 に答える 1

1

これはうまくいきますか?

db.student.aggregate(
  { $unwind : "$meetings" },
  { $group : { _id: "$_id", lastMeeting : { $max : "$meetings.time" }}},
  { $match: { lastMeeting : { $lt : IsoDate(...) } } 
);
于 2013-03-19T23:16:56.253 に答える