首页 > 解决方案 > 如果一个条件为真,Mongo 匹配返回所有数据

问题描述

我对 mongo 查询有疑问。我想在给定的时间内获取所有数据。例如。从 2019 年 1 月 1 日至 2019 年 1 月 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 模式

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

标签: mongodbmatch

解决方案


投影您要查看的数据。例如当我们使用查找查询时

db.collectionname.find({
  fieldname: "value"
},
{
  fieldname: 1
})

所以,这里第一个{}匹配和第二个{}项目只有那个值。

"fieldname":{ $exists: true}}如果此值存在于某些文档中而不存在于其他使用条件中,例如匹配条件中,则取决于您的架构。


推荐阅读