Home > OS >  Filter day on MongoDB
Filter day on MongoDB

Time:03-25

I have a collection called "batches" that has the field "createdAt" with ISODate:

    {
    "_id" : ObjectId("5f6134ecf908840018f2e9ea"),
    "status" : "BATCH_PROCESSING",
    "groupId" : 13,
    "type" : "not",
    "finished" : false,
    "scheduledTo" : "2020-09-15T18:50:51-03:00",
    "identifier" : "COLABORADORES",
    "createdAt" : "2020-09-18T18:41:00-03:00",
    "__v" : 0
}

{
    "_id" : ObjectId("5f6144d7863bb40018045906"),
    "status" : "BATCH_PROCESSING",
    "groupId" : 13,
    "type" : "not",
    "finished" : false,
    "scheduledTo" : "2020-09-16T19:48:00-03:00",
    "identifier" : "COLABORADORES",
    "createdAt" : "2020-09-15T19:48:55-03:00",
    "__v" : 0
}

{
    "_id" : ObjectId("5f617021b985c1001974c3af"),
    "status" : "CANCELED",
    "groupId" : 13,
    "type" : "not",
    "finished" : true,
    "scheduledTo" : "2020-09-15T23:06:00-03:00",
    "identifier" : "COLABORADORES",
    "createdAt" : "2020-09-18T22:53:37-03:00",
    "__v" : 0,
    "numberOfLines" : 1
}

I need to filter only documents in a specific date. I tried many ways but it didn't bring the documents :

db.getCollection("batches").find(
  { createdAt : {
    "$gte": ISODate("2020-09-15T00:00:00Z"), 
    "$lt": ISODate("2020-09-19T00:00:00Z") 
  } }
);

db.getCollection("batches").find({ createdAt : Date("2020-09-15")} 
);

The query works well, but the answer is always:

Fetched 0 record(s) in 136ms

How do I do this filter correctly?

CodePudding user response:

Your data is malformed. Your field 'createdDate' is a string, not an ISODate(). Consider this...

db.batches.insertMany([
{
    "_id" : ObjectId("5f6134ecf908840018f2e9ea"),
    "status" : "BATCH_PROCESSING",
    "groupId" : 13,
    "type" : "not",
    "finished" : false,
    "scheduledTo" : "2020-09-15T18:50:51-03:00",
    "identifier" : "COLABORADORES",
    "createdAt" : ISODate("2020-09-18T18:41:00-03:00"),
    "__v" : 0
},
{
    "_id" : ObjectId("5f6144d7863bb40018045906"),
    "status" : "BATCH_PROCESSING",
    "groupId" : 13,
    "type" : "not",
    "finished" : false,
    "scheduledTo" : "2020-09-16T19:48:00-03:00",
    "identifier" : "COLABORADORES",
    "createdAt" : ISODate("2020-09-15T19:48:55-03:00"),
    "__v" : 0
},
{
    "_id" : ObjectId("5f617021b985c1001974c3af"),
    "status" : "CANCELED",
    "groupId" : 13,
    "type" : "not",
    "finished" : true,
    "scheduledTo" : "2020-09-15T23:06:00-03:00",
    "identifier" : "COLABORADORES",
    "createdAt" : ISODate("2020-09-18T22:53:37-03:00"),
    "__v" : 0,
    "numberOfLines" : 1
}]
)

Query

When applying the query in your post...

db.getCollection("batches").find(
  { createdAt : {
    "$gte": ISODate("2020-09-15T00:00:00Z"), 
    "$lt": ISODate("2020-09-19T00:00:00Z") 
  } })

... we now see the following results:

MongoDB Enterprise replSet:PRIMARY> db.getCollection("batches").find(
...   { createdAt : {
...     "$gte": ISODate("2020-09-15T00:00:00Z"), 
...     "$lt": ISODate("2020-09-19T00:00:00Z") 
...   } })
{ "_id" : ObjectId("5f6134ecf908840018f2e9ea"), "status" : "BATCH_PROCESSING", "groupId" : 13, "type" : "not", "finished" : false, "scheduledTo" : "2020-09-15T18:50:51-03:00", "identifier" : "COLABORADORES", "createdAt" : ISODate("2020-09-18T21:41:00Z"), "__v" : 0 }
{ "_id" : ObjectId("5f6144d7863bb40018045906"), "status" : "BATCH_PROCESSING", "groupId" : 13, "type" : "not", "finished" : false, "scheduledTo" : "2020-09-16T19:48:00-03:00", "identifier" : "COLABORADORES", "createdAt" : ISODate("2020-09-15T22:48:55Z"), "__v" : 0 }
  • Related