0

みたいな書類がいっぱい…

{
    _id : "abc",
    createdOn : ISODate( '2013-04-27T00:00:00.000Z' ),
    updatedOn : ISODate( '2013-04-27T00:00:00.000Z' )
},
{
    _id : "def",
    createdOn : ISODate( '2013-04-27T00:00:00.000Z' ),
    updatedOn : ISODate( '2013-04-27T00:11:11.111Z' )
}

ドキュメントがリストに挿入されると、createdOn と updatedOn の値は等しくなります。ドキュメントが存在する場合、updatedOn フィールドのみが更新されます。

特定の日付範囲内のすべてのドキュメント updatedOn を検索するクエリを作成しようとしていますが、createdOn != updatedOn のドキュメントのみが必要です。これまでに取得したクエリは機能しますが、嫌いです。JavaScript を直接使用せずにフィールド全体でクエリを実行する方法を理解するのに苦労しています。これが私が持っているものです:

startTime = ISODate( '2013-04-27T00:00:00.000Z' );
endTime = ISODate( '2013-04-27T01:00:00.000Z' );
db.profiles.find(
  { "updatedOn" : { $gte : startTime, $lt : endTime },
    $where : "obj.createdOn == null || obj.createdOn.getTime() != obj.updatedOn.getTime()"
  },
  {_id: 1, createdOn: 1, updatedOn: 1}
);

より良い方法はありますか?$where javascript を回避し、ドキュメントの createdOn を updatedOn フィールドと直接比較できるようにするようなものです。

4

0 に答える 0