1

だから、私は何時間もこれを試してきましたが、結果は得られませんでした.

日付値を持つMongoDBコレクションがあり、"scrape_systemTime"それを挿入していscrape_systemTime : new Date()ます。

以下を使用して、1 週間前の結果を取得しようとしています。

db.scrape.find({scrape_systemTime: { $lt: new Date( Date.now() - 86400000*7)}})

以下のオブジェクトのように見える一連のドキュメントを返す必要がありますが、何も返しません。( "scrape_systemTime"1 週間前の日付を持つ属性を見てください。)

[{
        "newspaperID" : "6",
        "scrape_systemTime" : "Fri Oct 25 2013 13:14:10 GMT+0000 (UTC)",
        "_id" : ObjectId("526a6ea1985ba76408000010"),
        "languageID" : "1",
        "scrape_tabs_title" : "India",
        "scrape_tabs_href" : "http://www.indianexpress.com/supplement/India/798/",
        "scrape_thumb" : "images/default/noimage.jpg",
        "scrape_href" : "http://www.indianexpress.com/news/political-parties-woo-chhattisgarh-youth-on-facebook-whatsapp/1187180/",
        "scrape_title" : "Political parties woo Chhattisgarh youth on Facebook, WhatsApp",
        "scrape_largeimage" : "http://static.indianexpress.com/m-images/Fri Oct 25 2013, 17:57 hrs/M_Id_433064_facebook.jpg",
        "scrape_detail_article_text" : "",
        "scrape_newstime" : "PTI : Raipur, Fri Oct 25 2013, 18:11 hrs",
        "scrape_status" : "Pending",
        "viewCount" : 0,
        "error_log" : "OK",
        "ip" : "192.168.0.101"
}, ...]

しかし、_idfor date 条件を使用する場合、つまりObjectId()、1 週間前のタイムスタンプで作成し、以下のようにクエリで使用する場合:

db.scrape.find({_id: { $lt: ObjectId( Math.floor( new Date( Date.now() - 86400000*7 ) / 1000 ).toString(16) + '0000000000000000')}})

期待される結果を返します。

なぜこうなった?最初のクエリ構文に何か問題がありますか?

画像はこちら

ありがとう。

4

1 に答える 1

3

ドキュメントのscrape_systemTimeフィールドは文字列であり、Dateクエリが機能しない理由を説明するものではありません。

そのため、そのフィールドを次のように挿入すると、次のような文字列が得られるため、自分が思っているようにドキュメントを挿入していないことが必要です。

scrape_systemTime: Date()
于 2013-11-01T13:24:28.190 に答える