তারিখের উপর ভিত্তি করে জিজ্ঞাসা ফেরত


208

মংডোব এ আমার মত একটি ডেটা আছে

{ 
    "latitude" : "", 
    "longitude" : "", 
    "course" : "", 
    "battery" : "0", 
    "imei" : "0", 
    "altitude" : "F:3.82V", 
    "mcc" : "07", 
    "mnc" : "007B", 
    "lac" : "2A83", 
    "_id" : ObjectId("4f0eb2c406ab6a9d4d000003"), 
    "createdAt" : ISODate("2012-01-12T20:15:31Z") 
}

আমি কীভাবে জিজ্ঞাসা করব db.gpsdatas.find({'createdAt': ??what here??}), যাতে এটি ডিবি থেকে আমার উপরের ডেটা ফলাফলটি দেয়?


আপনি কোন নোডেজ গ্রন্থাগারটি ব্যবহার করছিলেন তা উল্লেখ করা কার্যকর হত তবে উদাহরণের ভিত্তিতে মনে হয় এটি এর
মঙ্গুজেগুলির

উত্তর:


420

আপনি সম্ভবত একটি ব্যাপ্তি ক্যোয়ারী তৈরি করতে চান, উদাহরণস্বরূপ, নির্দিষ্ট তারিখের পরে তৈরি সমস্ত আইটেম:

db.gpsdatas.find({"createdAt" : { $gte : new ISODate("2012-01-12T20:15:31Z") }});

আমি ব্যবহার করছি $gte(এর চেয়ে বড় বা সমান), কারণ এটি প্রায়শই কেবলমাত্র তারিখের অনুসন্ধানগুলির জন্য ব্যবহৃত হয়, যেখানে সময় উপাদানটি 00:00:00 হয়।

আপনি যদি সত্যই কোনও তারিখের সন্ধান করতে চান যা অন্য তারিখের সমান হয় তবে বাক্য গঠনটি হবে

db.gpsdatas.find({"createdAt" : new ISODate("2012-01-12T20:15:31Z") });

14
আহ :) আমি ভেবেছিলাম আপনি মঙ্গো কনসোল ব্যবহার করছেন। সেখানে, ISODateজেএস ডেট অবজেক্টের জন্য একটি মোড়ক রয়েছে। এরকম কিছু চেষ্টা করুন "createdAt" : new Date("2010-01-01")। কিছু কারণে, তবে কোডটি মঙ্গো কনসোলে (v। 2.0.2 এর জন্য) কাজ করে না
mnemosyn

তারিখ সূচনাটি কি ড্যাশগুলির পরিবর্তে স্ল্যাশ ব্যবহার করবে? ভালো লেগেছে:new Date("2010/01/01");
ভিক্টর এস

16

আপনি যদি এই তারিখে আইটেম পেতে চান তবে আপনাকে দুটি তারিখের তুলনা করতে হবে

দিনের শুরু, এবং দিনের শেষ পেতে আপনি প্রথমটির মতো দুটি তারিখ তৈরি করতে পারেন।

var startDate = new Date(); // this is the starting date that looks like ISODate("2014-10-03T04:00:00.188Z")

startDate.setSeconds(0);
startDate.setHours(0);
startDate.setMinutes(0);

var dateMidnight = new Date(startDate);
dateMidnight.setHours(23);
dateMidnight.setMinutes(59);
dateMidnight.setSeconds(59);

### MONGO QUERY

var query = {
        inserted_at: {
                    $gt:morning,
                    $lt:dateScrapedMidnight
        }
};

//MORNING: Sun Oct 12 2014 00:00:00 GMT-0400 (EDT)
//MIDNIGHT: Sun Oct 12 2014 23:59:59 GMT-0400 (EDT)

16

নোড v0.12.7 এবং v4.4.4 ব্যবহার করে ব্যবহার করা হয়েছে মঙ্গো v3.2.3 এ সবেমাত্র কিছু বাস্তবায়িত হয়েছে:

{ $gte: new Date(dateVar).toISOString() }

আমি একটি আইএসওডেটে পাস করছি (উদাঃ 2016-04-22T00: 00: 00Z) এবং এটি টোআইএসএসটিং ফাংশন সহ বা ছাড়াই একটি ফাইন্ড () ক্যোয়ারির জন্য কাজ করে। কিন্তু .ggregate () $ ম্যাচ ক্যোয়ারিতে ব্যবহার করার সময় এটিআইএসএসটিং ফাংশন পছন্দ করে না!


12

আপনি যদি গত 5 মিনিটে সমস্ত নতুন জিনিস পেতে চান তবে আপনাকে কিছু গণনা করতে হবে, তবে এটি শক্ত নয় ...

প্রথমে আপনি যে সম্পত্তির সাথে মিল রাখতে চান তার উপর একটি সূচক তৈরি করুন (উত্থানের জন্য সাজানোর দিকনির্দেশ -1 এবং আরোহণের জন্য 1 অন্তর্ভুক্ত করুন)

db.things.createIndex({ createdAt: -1 }) // descending order on .createdAt

তারপরে শেষ 5 মিনিটে (60 সেকেন্ড * 5 মিনিট) তৈরি করা নথির জন্য ক্যোয়ারী .... কারণ জাভাস্ক্রিপ্টের .getTime()রিটার্ন মিলি সেকেন্ডে আপনাকে new Date()কনস্ট্রাক্টরের ইনপুট হিসাবে ব্যবহারের আগে আপনাকে 1000 দ্বারা বহুগুণে চালিত করতে হবে ।

db.things.find({
        createdAt: {
            $gte: new Date(new Date().getTime()-60*5*1000).toISOString()
         }
     })
     .count()

এর জন্য ব্যাখ্যা new Date(new Date().getTime()-60*5*1000).toISOString()নিম্নরূপ:

প্রথমে আমরা "5 মিনিট আগে" গণনা করি:

  1. new Date().getTime() আমাদেরকে মিলি সেকেন্ডে বর্তমান সময় দেয়
  2. আমরা এটি থেকে 5 মিনিট (এমএসে) বিয়োগ করতে চাই: 5*60*1000- আমি 60সেকেন্ডে কেবল গুণ করি যাতে এটি সহজেই পরিবর্তন হয়। আমি যদি 2 ঘন্টা (120 মিনিট) চাই তবে আমি কেবলমাত্র এতে পরিবর্তন 5করতে 120পারি।
  3. new Date().getTime()-60*5*1000আমাদের দেয় 1484383878676(5 মিনিট আগে এমএসে)

new Date()মংগোডিবি টাইমস্ট্যাম্পগুলির জন্য প্রয়োজনীয় ISO স্ট্রিং ফর্ম্যাটটি পেতে এখন আমাদের এটি একটি কনস্ট্রাক্টরে খাওয়াতে হবে।

  1. { $gte: new Date(resultFromAbove).toISOString() } (মংডোব। ফাইন্ড () ক্যোয়ারী)
  2. যেহেতু আমাদের চলক থাকতে পারে না আমরা এটি সমস্ত শটগুলিতেই করি: new Date(new Date().getTime()-60*5*1000)
  3. ... তারপরে আইএসও স্ট্রিংয়ে রূপান্তর করুন: .toISOString()
  4. new Date(new Date().getTime()-60*5*1000).toISOString() আমাদের দেয় 2017-01-14T08:53:17.586Z

আপনি যদি নোড-মংডোব-নেটিভ ড্রাইভারটি ব্যবহার করেন তবে অবশ্যই এটি ভেরিয়েবলগুলির সাথে কিছুটা সহজ but


1
আমি মনে করি আপনি এর Date.now()পরিবর্তে ব্যবহার করতে পারেনnew Date().getTime()
বারানগার

4

আপনিও চেষ্টা করতে পারেন:

{
    "dateProp": { $gt: new Date('06/15/2016').getTime() }
}

2

আপনি যদি মঙ্গুজ ব্যবহার করছেন,

try {
  const data = await GPSDatas.aggregate([
    {
      $match: { createdAt : { $gt: new Date() }
    },
    {
      $sort: { createdAt: 1 }
    }
  ])
  console.log(data)

} catch(error) {
    console.log(error)
}

1

একটি নির্দিষ্ট তারিখ সহ সন্ধান করুন:

db.getCollection('CollectionName').find({"DepartureDate" : new ISODate("2019-06-21T00:00:00.000Z")})

বৃহত্তর gteবা সামান্য সঙ্গে সন্ধান করুন lt:

db.getCollection('CollectionName').find({"DepartureDate" : { $gte : new ISODate("2019-06-11T00:00:00.000Z") }})

পরিসীমা দ্বারা অনুসন্ধান করুন:

db.getCollection('CollectionName').find({ 
    "DepartureDate": { 
        $lt: new Date(), 
        $gte: new Date(new Date().setDate(new Date().getDate()-15))
      } 
    })
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.