如果一个条件为真,则Mongo Match将返回所有数据

时间:2019-06-21 08:55:27

标签: mongodb match

我的mongo查询有问题。我想在给定的时间内获取所有数据。例如。从2019-01-01到2019-01-10。但是我看到,即使一个元素匹配,条件mongo也会返回全部数据。

db.production.aggregate([
    {
        "$group": {
            "_id": "$machine_name",
            "array": {
                "$push": {
                    "value": "$value",
                    "type": "$variable_name",
                    "date": {
                        "$dateFromString": {
                            "dateString": "$datetime_from",
                            "format": "%Y-%m-%d %H:%M:%S"
                        }
                    }
                }
            }
        }
    },
    {
        "$match": {
            "$and": [
                {
                    "array.date": {
                        "$gt": ISODate("2019-01-01T00:00:00Z")
                    }
                },
                {
                    "array.date": {
                        "$lt":ISODate("2019-01-02T23:59:59Z")
                    }
                }
            ]
        }
    }
]);

以下是架构: mongo schema

它应该只返回给定时间段内的数据

1 个答案:

答案 0 :(得分:0)

投影要查看的数据。例如,当我们使用查找查询时 db.collectionname.find({fieldname:'value'},{fieldname:1})

因此,这里第一个{}匹配,第二个{}仅投影该值。

在某些条件下,如果某些条件中不存在该值,则取决于您的模式,而在其他条件中,例如“ fieldname”:{$ exists:true}}则处于匹配条件。