みたいな書類がいっぱい…
{
_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 フィールドと直接比較できるようにするようなものです。