根据创建日期从集合中查找对象

时间:2020-03-27 09:59:54

标签: node.js mongodb mongoose

我有一个ticket_masters集合,其中包含createdAt字段,并存储日期和时间。

[
    {
        "_id": "5e78f2ddc0e09128e81db47a",
        "NAME": "Jasin",
        "PHONE": "2252545414",
        "MAIL": "sdsdm@m.com",
        "createdAt": "2020-03-23T17:33:17.470Z",
        "updatedAt": "2020-03-23T17:33:17.470Z",
        "__v": 0
    }
]

现在我想根据用户集合中的createAt字段查找记录。已经尝试使用以下代码段。

db.getCollection('ticket_masters').find({
    "createdAt" : '2020-03-17T18:30:00.237+00:00'
    })

输出:

Fetched 0 record(s) in 1ms

但是根据上面的代码片段找到了零条记录。请帮助我解决问题 谢谢

2 个答案:

答案 0 :(得分:0)

希望这会对您有所帮助。

db.getCollection('ticket_masters').find({
    "createdAt" : ISODate("2020-03-17T18:30:00.237+00:00")
})

或者您可以尝试这个。

db.getCollection('ticket_masters').aggregate([
    {
        $match: {
            "createdAt":ISODate("2020-03-17T18:30:00.237+00:00")
        }
    },
])

答案 1 :(得分:0)

通过指定日期类型。

$eq运算符匹配字段值等于指定值的文档。

// Date and time

db.getCollection('ticket_masters').aggregate([
    {
        $match: {
           "createdAt": {$eq: new Date('2020-03-17T18:30:00.237+00:00')}
        }
    },
])

OR 

// Only Date

db.getCollection('ticket_masters').aggregate([
    {
        $match: {
           "createdAt": {"$gte": new Date("2020-03-17"), $lt : new Date("2020-03-18") }
        }
    },
])

您保存的日期是新的Date(),其中包括时间成分。要查询这些时间,您需要创建一个包含一天中所有时刻的日期范围

使用momentjs

示例:

// start today
var start = moment().startOf('day');
// end today
var end = moment(today).endOf('day');

{ createdAt: { '$gte': start, '$lte': end }

$gt匹配大于指定值的值。

$lt匹配小于指定值的值。

有关更多信息:https://docs.mongodb.com/manual/reference/operator/query-comparison/