559 Stimmen

Objekte zwischen zwei Daten suchen MongoDB

Ich habe herumgespielt Speichern von Tweets in Mongodb, jedes Objekt sieht wie folgt aus:

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

Wie würde ich eine Abfrage schreiben, die die erstellt_am und findet alle Objekte zwischen 18:47 und 19:00? Muss ich meine Dokumente aktualisieren, damit die Datumsangaben in einem bestimmten Format gespeichert werden?

0 Stimmen

Sie sagen nicht, über welches Feld Sie eine Abfrage wünschen?

1 Stimmen

Ups, ich möchte das created_at abfragen und alles zwischen zwei Daten finden.

0 Stimmen

Ich bin neugierig, dass, warum nicht verwenden Sie Zeitstempel, alle Vorteile durch die Verwendung des Date Obj?

1voto

Roman Kazanovskyi Punkte 2901

Scala: Mit joda DateTime und BSON-Syntax (reactivemongo):

val queryDateRangeForOneField = (start: DateTime, end: DateTime) =>
    BSONDocument(
      "created_at" -> BSONDocument(
        "$gte" -> BSONDateTime(start.millisOfDay().withMinimumValue().getMillis), 
        "$lte" -> BSONDateTime(end.millisOfDay().withMaximumValue().getMillis)),
     )

donde millisOfDay().withMinimumValue() für "2021-09-08T06:42:51.697Z" wird "2021-09-08T00:00:00.000Z" sein und wobei millisOfDay(). withMaximumValue() für "2021-09-08T06:42:51.697Z" wird "2021-09-08T23:59:99.999Z" sein

0voto

ayu for u Punkte 187

Ich habe versucht, in diesem Modell wie pro meine Anforderungen, die ich brauche, um ein Datum zu speichern, wenn immer ein Objekt erstellt wird später möchte ich alle Datensatz abrufen in meiner html-Datei Ich habe das folgende Format verwendet: mm/dd/yyyy

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>
<head>

    <script>
//jquery
    $(document).ready(function(){  
    $("#select_date").click(function() { 
    $.ajax({
    type: "post",
    url: "xxx", 
    datatype: "html",
    data: $("#period").serialize(),  
    success: function(data){
    alert(data);
    } ,//success

    }); //event triggered

    });//ajax
    });//jquery  
    </script>

    <title></title>
</head>

<body>
    <form id="period" name='period'>
        from <input id="selecteddate" name="selecteddate1" type="text"> to 
        <input id="select_date" type="button" value="selected">
    </form>
</body>
</html>

in meiner py (python) Datei habe ich es in "iso fomate" umgewandelt auf folgende Weise

date_str1   = request.POST["SelectedDate1"] 
SelectedDate1   = datetime.datetime.strptime(date_str1, '%m/%d/%Y').isoformat()

und in meiner dbmongo-Sammlung mit "SelectedDate" als Feld in meiner Sammlung gespeichert

zum Abrufen von Daten oder Dokumenten zwischen 2 Daten habe ich folgende Abfrage verwendet

db.collection.find( "SelectedDate": {'$gte': SelectedDate1,'$lt': SelectedDate2}})

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X