json Mongodb মধ্যে ISODate সঙ্গে তারিখ অনুসন্ধান কাজ বলে মনে হচ্ছে না




bson (6)

আমি মংডোডবিতে কাজ করার জন্য এমনকি সবচেয়ে মৌলিক তারিখ অনুসন্ধান পেতে সক্ষম বলে মনে হচ্ছে না। এমন একটি দস্তাবেজ যা এমন কিছু দেখায়:

{
    "_id" : "foobar/201310",
    "ap" : "foobar",
    "dt" : ISODate("2013-10-01T00:00:00.000Z"),
    "tl" : 375439
}

এবং এমন একটি প্রশ্ন যা এই রকম দেখায়:

{ 
    "dt" : { 
        "$gte" : { 
            "$date" : "2013-10-01T00:00:00.000Z"
        }
    }
}

আমি এক্সিকিউটিভ থেকে 0 ফলাফল পেতে:

db.mycollection.find({
  "dt" : { "$gte" : { "$date" : "2013-10-01T00:00:00.000Z"}}
})

কোন ধারণা কেন এই কাজ করে না?

রেফারেন্সের জন্য, এই প্রশ্নটি স্প্রিং এর মংটো টেম্পলেট দ্বারা উত্পাদিত হচ্ছে, তাই শেষ পর্যন্ত মঙ্গোডিবিতে পাঠানো এই প্রশ্নের উপর আমার সরাসরি নিয়ন্ত্রণ নেই।

(দ্রষ্টব্য)

> db.version()
2.4.7

ধন্যবাদ!


আমি Robomongo ব্যবহার করছি mongodb ক্লায়েন্ট গুই হিসাবে এবং নীচের আমার জন্য কাজ

db.collectionName.find({"columnWithDateTime" : {
$lt:new ISODate("2016-02-28T00:00:00.000Z")}})

অ্যাপ পাশে আমি নোডেজ ভিত্তিক ড্রাইভার মংডব (v1.4.3) ব্যবহার করছি, অ্যাপ্লিকেশনটি ui তে তারিখপিকার ব্যবহার করে যা YYYY-mm-dd এর মতো তারিখ দেয়, তারপর এটি 00:00:00 এর মতো ডিফল্ট সময় এবং তারপর দেওয়া হয় new Date() কনস্ট্রাকটর এবং তারপরে মংডব মানদণ্ডের বস্তু সরবরাহ করে, আমি মনে করি ড্রাইভারটি তারিখটি ISO তারিখের মধ্যে রূপান্তর করে এবং ক্যোয়ারী তারপর কাজ করে এবং পছন্দসই আউটপুট দেয় তবে একই new Date() কন্সট্রাকটর কাজ করে না বা একই দেখায় না রোবোর মংগোতে আউটপুট, একই মানদণ্ডের জন্য, যা অদ্ভুত, কারণ আমি আমার মানদণ্ডের বস্তুগুলি পরীক্ষা করার জন্য robomongo ব্যবহার করেছি।

ডিফল্ট ক্লি মংশেলে উভয় ISODate এবং new Date() সাথে ভালভাবে কাজ করে।


মংডোডিবি শেলে:

db.getCollection('sensorevents').find({from:{$gt: new ISODate('2015-08-30 16:50:24.481Z')}})

আমার নোডজেএস কোডে (মংওজ ব্যবহার করে)

    SensorEvent.Model.find( {
        from: { $gt: new Date( SensorEventListener.lastSeenSensorFrom ) }
    } )

আমি আমার সেন্সর ইভেন্ট সংগ্রহের জিজ্ঞাসা করছি যেখানে 'থেকে' ক্ষেত্র প্রদত্ত তারিখের চেয়ে বেশি


মংডোডিবি বই থেকে পাতা মন্তব্য:

"dt" : 
{
    "$gte" : ISODate("2014-07-02T00:00:00Z"), 
    "$lt" : ISODate("2014-07-03T00:00:00Z") 
}

এটা আমার জন্য কাজ করেছে। সম্পূর্ণ প্রেক্ষাপটে, নিম্নলিখিত কমান্ডটি ২013-01-01 (YYYY-MM-DD) তারিখের তারিখের তারিখের তারিখ যেখানে প্রতিটি রেকর্ড পায়: জুলাই:

db.mycollection.find({ "dt" : { "$gte" : ISODate("2013-10-01T00:00:00Z"), "$lt" : ISODate("2013-10-02T00:00:00Z") }})

যদিও $date মংডোডিবি এক্সটেন্ডেড JSON এর একটি অংশ এবং এটি mongoexport সাথে ডিফল্ট হিসাবে আপনি যা পাবেন তা আমি মনে করি না আপনি এটির প্রশ্নের অংশ হিসাবে এটি ব্যবহার করতে পারেন।

নিচের মত $date সাথে সঠিক অনুসন্ধান করার চেষ্টা করলে:

db.foo.find({dt: {"$date": "2012-01-01T15:00:00.000Z"}})

আপনি ত্রুটি পাবেন:

error: { "$err" : "invalid operator: $date", "code" : 10068 }

এটা চেষ্টা কর:

db.mycollection.find({
    "dt" : {"$gte": new Date("2013-10-01T00:00:00.000Z")}
})

অথবা ( @user3805045 দ্বারা মন্তব্য অনুসরণ করুন):

db.mycollection.find({
    "dt" : {"$gte": ISODate("2013-10-01T00:00:00.000Z")}
})

ISODate সময় ছাড়া তারিখ তুলনা করতে পারে ( @MattMolnar দ্বারা @MattMolnar )।

মংগোতে ডেটা প্রকারের মতে শেল উভয় সমতুল্য হওয়া উচিত:

মংগো শেল তারিখটি ফেরত দেওয়ার জন্য বিভিন্ন পদ্ধতি সরবরাহ করে, হয় একটি স্ট্রিং বা তারিখের বস্তুর মতো:

  • তারিখ () পদ্ধতি যা একটি স্ট্রিং হিসাবে বর্তমান তারিখটি ফেরত দেয়।
  • নতুন তারিখ () কনস্ট্রাকটর যা ISDATE () র্যাপার ব্যবহার করে একটি তারিখ বস্তু প্রদান করে।
  • ISODate () কনস্ট্রাকটর যা ISDATE () র্যাপার ব্যবহার করে একটি তারিখ বস্তু প্রদান করে।

এবং ISODate ব্যবহার করে এখনও একটি তারিখ বস্তু ফিরে করা উচিত

কঠোর JSON উপস্থাপনা প্রয়োজন হলে {"$date": "ISO-8601 string"} ব্যবহার করা যেতে পারে। এক সম্ভাব্য উদাহরণ হাদোপ সংযোগকারী।


এটা চেষ্টা কর:

{ "dt" : { "$gte" : ISODate("2013-10-01") } }

জson কঠোর মোডে, আপনাকে অর্ডারটি রাখতে হবে:

{
    "dt": {
        "$gte": {
            "$date": "2013-10-01T00:00:00.000Z"
        }
    }
}

Mlab.com এ আমার অনুসন্ধানের প্রশ্নগুলি সংজ্ঞায়িত করতে কেবলমাত্র জিনিসটি।





isodate