Saya telah bermain-main menyimpan tweet di dalam mongodb, setiap objek terlihat seperti ini:
{
"_id" : ObjectId("4c02c58de500fe1be1000005"),
"contributors" : null,
"text" : "Hello world",
"user" : {
"following" : null,
"followers_count" : 5,
"utc_offset" : null,
"location" : "",
"profile_text_color" : "000000",
"friends_count" : 11,
"profile_link_color" : "0000ff",
"verified" : false,
"protected" : false,
"url" : null,
"contributors_enabled" : false,
"created_at" : "Sun May 30 18:47:06 +0000 2010",
"geo_enabled" : false,
"profile_sidebar_border_color" : "87bc44",
"statuses_count" : 13,
"favourites_count" : 0,
"description" : "",
"notifications" : null,
"profile_background_tile" : false,
"lang" : "en",
"id" : 149978111,
"time_zone" : null,
"profile_sidebar_fill_color" : "e0ff92"
},
"geo" : null,
"coordinates" : null,
"in_reply_to_user_id" : 149183152,
"place" : null,
"created_at" : "Sun May 30 20:07:35 +0000 2010",
"source" : "web",
"in_reply_to_status_id" : {
"floatApprox" : 15061797850
},
"truncated" : false,
"favorited" : false,
"id" : {
"floatApprox" : 15061838001
}
Bagaimana cara saya menulis kueri yang memeriksa Created_at dan menemukan semua objek antara 18:47 dan 19:00? Apakah saya perlu memperbarui dokumen saya sehingga tanggal disimpan dalam format tertentu?
2010-04-29T00:00:00.000Z
jauh lebih mudah daripada menghitung tanggal / waktu yang sama dalam milidetik. Anda juga dapat melakukan konversi zona waktu dengan cukup mudah. Juga, Tanggal sudah menangani hal-hal seperti hari kabisat, detik kabisat, dan keanehan lain yang biasanya tidak ingin Anda tangani sendiri.Jawaban:
Meminta Rentang Tanggal (Bulan atau Hari Tertentu)dalamBuku Masak MongoDBmemiliki penjelasan yang sangat baik tentang masalah ini, tetapi di bawah ini adalah sesuatu yang saya coba sendiri dan sepertinya berhasil.Berdasarkan eksperimen saya, Anda perlu membuat serial tanggal Anda ke dalam format yang didukung MongoDB, karena yang berikut memberikan hasil pencarian yang tidak diinginkan.
Dalam contoh kedua tidak ada hasil yang diharapkan, tetapi masih ada satu yang didapat. Ini karena perbandingan string dasar dilakukan.
sumber
Untuk memperjelas. Yang penting diketahui adalah:
Berikut ini adalah potongan kode yang berfungsi, di mana kami melakukan sedikit manipulasi tanggal untuk memastikan Mongo (di sini saya menggunakan modul luwak dan ingin hasil untuk baris yang atribut tanggalnya kurang dari (sebelum) tanggal yang diberikan sebagai parameter myDate) dapat menangani dengan benar:
sumber
MongoDB sebenarnya menyimpan mili tanggal sebagai int (64), seperti yang ditentukan oleh http://bsonspec.org/#/specification
Namun, itu bisa sangat membingungkan ketika Anda mengambil tanggal karena driver klien akan instantiate objek tanggal dengan zona waktu lokal sendiri. Driver JavaScript di konsol mongo pasti akan melakukan ini.
Jadi, jika Anda peduli dengan zona waktu Anda, maka pastikan Anda tahu apa yang seharusnya ketika Anda mendapatkannya kembali. Ini seharusnya tidak terlalu menjadi masalah bagi kueri, karena masih akan menyamakan ke int yang sama (64), terlepas dari apa zona waktu objek kencan Anda (saya harap). Tapi saya pasti akan membuat pertanyaan dengan objek tanggal aktual (bukan string) dan membiarkan pengemudi melakukan hal itu.
sumber
Python dan
pymongo
Menemukan objek antara dua tanggal dalam Python dengan
pymongo
dalam koleksiposts
(berdasarkan tutorial ):Di mana
{"$gte": from_date, "$lt": to_date}
menentukan kisaran dalam haldatetime.datetime
jenis.sumber
Ganti
collection
dengan nama koleksi yang ingin Anda jalankan kuerisumber
Gunakan kode ini untuk menemukan catatan antara dua tanggal menggunakan
$gte
dan$lt
:sumber
Menggunakan dengan Moment.js dan Operator Kueri Perbandingan
sumber
Ubah tanggal Anda menjadi zona waktu GMT saat Anda memasukkannya ke dalam bahasa Mongo. Dengan begitu tidak pernah ada masalah zona waktu. Kemudian lakukan perhitungan di bidang twitter / zona waktu ketika Anda menarik kembali data untuk presentasi.
sumber
Mengapa tidak mengonversi string ke integer dari bentuk YYYYMMDDHHMMSS? Setiap penambahan waktu kemudian akan membuat bilangan bulat yang lebih besar, dan Anda dapat memfilter bilangan bulat alih-alih mengkhawatirkan konversi ke waktu ISO.
sumber
gunakan $ gte dan $ lte untuk menemukan antara data tanggal di mongodb
sumber
Anda juga dapat memeriksanya. Jika Anda menggunakan metode ini, gunakan fungsi parse untuk mendapatkan nilai dari Database Mongo:
sumber
sumber
Anda juga dapat memeriksa ini atau mencoba daripada menggunakan agregat
sumber
saya mencoba dalam model ini sesuai kebutuhan saya, saya perlu menyimpan tanggal ketika suatu objek dibuat nanti saya ingin mengambil semua catatan (dokumen) antara dua tanggal dalam file html saya saya menggunakan format berikut mm / hh / tttt
dalam file py (python) saya, saya mengubahnya menjadi "iso fomate" dengan cara berikut
dan disimpan dalam koleksi dbmongo saya dengan "SelectedDate" sebagai bidang dalam koleksi saya
untuk mengambil data atau dokumen antara hingga 2 tanggal saya menggunakan permintaan berikut
sumber