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?

16voto

Tính Ngô Quang Punkte 3750

Verwendung mit Moment.js y Vergleichsabfrageoperatoren

  var today = moment().startOf('day');
  // "2018-12-05T00:00:00.00
  var tomorrow = moment(today).endOf('day');
  // ("2018-12-05T23:59:59.999

  Example.find(
  {
    // find in today
    created: { '$gte': today, '$lte': tomorrow }
    // Or greater than 5 days
    // created: { $lt: moment().add(-5, 'days') },
  }), function (err, docs) { ... });

15voto

Sunil Pal Punkte 147

Verwenden Sie diesen Code, um den Datensatz zwischen zwei Daten zu finden, indem Sie $gte y $lt :

db.CollectionName.find({"whenCreated": {
    '$gte': ISODate("2018-03-06T13:10:40.294Z"),
    '$lt': ISODate("2018-05-06T13:10:40.294Z")
}});

0 Stimmen

Was bedeutet dies für die akzeptierte Antwort, die 8 Jahre zuvor gegeben wurde?

14voto

Sahil Thummar Punkte 564

Speichern Sie das Datum created_at im ISO-Datumsformat und verwenden Sie $gte und $lte.

db.connection.find({
    created_at: {
        $gte: ISODate("2010-05-30T18:47:00.000Z"),
        $lte: ISODate("2010-05-30T19:00:00.000Z")
    }
})

10voto

db.collection.find({$and:
  [
    {date_time:{$gt:ISODate("2020-06-01T00:00:00.000Z")}},
     {date_time:{$lt:ISODate("2020-06-30T00:00:00.000Z")}}
   ]
 })

##In case you are making the query directly from your application ##

db.collection.find({$and:
   [
     {date_time:{$gt:"2020-06-01T00:00:00.000Z"}},
     {date_time:{$lt:"2020-06-30T00:00:00.000Z"}}
  ]

 })

9voto

Kevin007 Punkte 125

Sie können sich auch das hier ansehen. Wenn Sie diese Methode verwenden, dann verwenden Sie die Parse-Funktion, um Werte aus der Mongo-Datenbank zu erhalten:

db.getCollection('user').find({
    createdOn: {
        $gt: ISODate("2020-01-01T00:00:00.000Z"),
        $lt: ISODate("2020-03-01T00:00:00.000Z")
    }
})

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