মোংডব-এ আইএসওডেটের সাথে তারিখের ক্যোয়ারীটি কাজ করছে বলে মনে হচ্ছে না


189

মোঙ্গোডিবিতে কাজ করার জন্য আমি এমনকি সবচেয়ে বুনিয়াদি তারিখের ক্যোয়ারী পেতে সক্ষম হতে পারে বলে মনে হয় না। এমন কোনও দস্তাবেজ সহ যা দেখতে দেখতে:

{
    "_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

ধন্যবাদ!

উত্তর:


312

যদিও মঙ্গোডিবি এক্সটেন্ডেড জাসনের$date একটি অংশ এবং এটিই আপনি ডিফল্ট হিসাবে পেয়ে যাবেন বলে আমি মনে করি না যে আপনি এটি সত্যিই ক্যোয়ারির অংশ হিসাবে ব্যবহার করতে পারবেন।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")}
})

বা ( @ ব্যবহারকারী3805045 এর মন্তব্য অনুসরণ করে ):

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

ISODateসময় ছাড়া তারিখের তুলনা করার প্রয়োজনও হতে পারে ( @ ম্যাটমোলনার দ্বারা দ্রষ্টব্য )

মঙ্গো শেলের ডাটা টাইপ অনুসারে উভয়ই সমান হতে হবে:

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

  • তারিখ () পদ্ধতি যা বর্তমান তারিখটিকে স্ট্রিং হিসাবে ফিরিয়ে দেয়।
  • নতুন তারিখ () কনস্ট্রাক্টর যা আইএসওডেট () মোড়কে ব্যবহার করে একটি তারিখ অবজেক্ট দেয়।
  • আইএসওডেট () কনস্ট্রাক্টর যা আইএসওডেট () মোড়ক ব্যবহার করে একটি তারিখ অবজেক্ট দেয়।

এবং ব্যবহারের ISODate পরেও একটি তারিখের অবজেক্ট ফিরে আসা উচিত

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


3
হ্যাঁ। আমি মনে করি আপনি যখন Queryবসন্তে বস্তুটি মুদ্রণ করেন তখন যা ফিরে আসে তা দিয়ে আমাকে ফেলে দেওয়া হয়েছিল । ক্যোয়ারির ক্রমিক আকারটি কোনও বৈধ ক্যোয়ারী নয় যা আপনি কেবল একটি মঙ্গো শেলটিতে অনুলিপি / পেস্ট করতে পারেন যা নিজে থেকেই হতাশার মতো। অপরাধী এখানে আছেন: গ্রেপকোড.ফায়াল
রিপো 1.ম্যাভেন.আর.মেনভেন

2
আংশিক (সময় নেই) তারিখের তুলনা করার সময়, আমাকে অন্যটিতে স্যুইচ new Date('2016-03-09')করতে হয়েছিল ISODate('2016-03-09')। প্রাক্তন কোনও $gteপ্রশ্নের জন্য অতীতে তারিখগুলি ফিরে আসত ।
ম্যাট মোলনার

@ ম্যাটমোলনার লক্ষণীয়, এবং একটি উত্তর দিয়ে উত্তর আপডেট করেছে। ধন্যবাদ।
শূন্য323

92

থেকে MongoDB পাকপ্রণালীর পৃষ্ঠা মন্তব্য করেছেন:

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

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

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

1
আমি একটি "ISODate অপরিজ্ঞাত" ত্রুটি পেয়েছি। আমি এই সমস্যাটি সমাধান করতে পারিনি।
বাথুহান আক্কায়া

@ বাথুহান আক্কায়া পাইমঙ্গোর সাথে পাইথনের datetime.datetimeসমান ISODate
jtbr

12

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

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

5

আমি রোমোমঙ্গোকে মঙ্গডব ক্লায়েন্ট গুই হিসাবে ব্যবহার করছি এবং নীচে আমার পক্ষে কাজ করেছে

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

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

যেখানে ডিফল্ট ক্লাইম মঙ্গোশেল উভয়ের সাথেই ভাল কাজ করে ISODate এবংnew Date()


1
টিপটির জন্য আপনাকে ধন্যবাদ, রোবঙ্গো মঙ্গো কম্পাসের চেয়ে অনেক ভাল
অ্যালেক্স

5

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

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

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


ক্যোয়ারি চালাতে ত্রুটি। কারণ: (অবৈধ_অর্থক) অবৈধ অপারেটর: $ তারিখ
সাবের তাবতাবই ইয়াজদী

2

মঙ্গোডিবি শেলের মধ্যে:

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

আমার নোডজেএস কোডে (মঙ্গুজ ব্যবহার করে)

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

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


4
স্ট্যাক ওভারফ্লোতে স্বাগতম! দয়া করে কেবল প্রশ্নের উত্তর পোস্ট করুন, এবং "এটি আমার প্রথম পোস্ট" এর মতো অতিরিক্ত জিনিস নয়। স্ট্যাক ওভারফ্লোটি কোনও বার্তা বোর্ড নয়, উইকিপিডিয়া হিসাবে ভাবেন।
durron597

1

এটি আমার নথি

"_id" : ObjectId("590173023c488e9a48e903d6"),
    "updatedAt" : ISODate("2017-04-27T04:26:42.709Z"),
    "createdAt" : ISODate("2017-04-27T04:26:42.709Z"),
    "flightId" : "590170f97cb84116075e2680",

 "_id" : ObjectId("590173023c488e9a48e903d6"),
        "updatedAt" : ISODate("2017-04-28T03:26:42.609Z"),
        "createdAt" : ISODate("2017-04-28T03:26:42.609Z"),
        "flightId" : "590170f97cb84116075e2680",

এখন আমি প্রতি 27 তম তারিখের নথিটি খুঁজতে চাই so তাই আমি এটি ব্যবহার করেছি ....

 > db.users.find({createdAt:{"$gte":ISODate("2017-04-27T00:00:00Z"),"$lt":ISODate("2017-04-28T00:00:00Z") }}).count()

result:1

এটি আমার জন্য কাজ করেছে।


0

এখনকার চেয়ে কম বা সমান মান অনুসন্ধান করার সময় এটি আমার জন্য কাজ করেছিল:

db.collectionName.find({ "dt": { "$lte" : new Date() + "" } });


0

পুরানো প্রশ্ন, তবে এখনও প্রথম গুগল হিট, তাই আমি এটি এখানে পোস্ট করি যাতে আমি এটি আরও সহজে খুঁজে পাই ...

মঙ্গো ৪.২ এবং একটি সামগ্রিক () ব্যবহার করে:

db.collection.aggregate(
    [
     { $match: { "end_time": { "$gt": ISODate("2020-01-01T00:00:00.000Z")  } } },
     { $project: {
          "end_day": { $dateFromParts: { 'year' : {$year:"$end_time"}, 'month' : {$month:"$end_time"}, 'day': {$dayOfMonth:"$end_time"}, 'hour' : 0  } }
     }}, 
     {$group:{
        _id:   "$end_day",
        "count":{$sum:1},
    }}
   ]
)

এটি একটি আপনাকে একটি তারিখ হিসাবে গ্রুপবাই ভেরিয়েবল দেয়, কখনও কখনও উপাদানগুলি হিসাবে নিজেই হাত দেওয়া আরও ভাল।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.