繁体   English   中英

MongoDB之间的日期范围查询-嵌套属性

[英]MongoDB between date range query - nested property

如何编写查询以返回日期之间的对象? 查询应搜索嵌套属性。 我使用$gte$lte但它似乎没有按我预期的那样工作。 我想返回在两个日期之间具有history.startTime的“任务”对象。

 db.tasks.find({'history.startTime' : { '$gte': ISODate("2017-02-04T00:00:00.000Z"), '$lt': ISODate("2017-02-05T23:00:00.000Z")} }).pretty()
    {
            "_id" : ObjectId("588f53c5d00baa2558fd56ae"),
            "desc" : "test3",
            "category" : "Category1",
            "project" : "Project1",
            "_creator" : "582afb3800c1bc1f203edf39",
            "history" : [
                    {
                            "startTime" : ISODate("2017-02-06T11:49:42.570Z"),
                            "stopTime" : ISODate("2017-02-06T11:49:45.725Z"),
                            "_id" : ObjectId("589862d9449b4629f8dbaba7"),
                            "dt" : 3.155
                    },
                    {
                            "startTime" : ISODate("2017-02-06T08:53:53.086Z"),
                            "stopTime" : ISODate("2017-02-06T11:47:58.098Z"),
                            "_id" : ObjectId("5898626e449b4629f8dbaba6"),
                            "dt" : 10445.012
                    },
                    {
                            "startTime" : ISODate("2017-01-30T15:30:46.287Z"),
                            "stopTime" : ISODate("2017-01-30T15:32:52.979Z"),
                            "_id" : ObjectId("588f5c2cd00baa2558fd56b0"),
                            "dt" : 126.692
                    },
                    {
                            "startTime" : ISODate("2017-01-30T13:55:09.738Z"),
                            "stopTime" : ISODate("2017-01-30T14:55:13.974Z"),
                            "_id" : ObjectId("588f53d1d00baa2558fd56af"),
                            "dt" : 3604.236
                    }
            ],
            "isCompleted" : false,
            "isPerforming" : false,
            "duration" : 14179.095000000001,
            "updated" : ISODate("2017-02-06T11:49:45.725Z"),
            "creationDate" : ISODate("2017-01-30T14:55:01.045Z"),
            "__v" : 4
    }

它是一个数组。 您的查询将不起作用。 您必须使用$ elemMatch。

db.tasks.find({
    'history': {
        $elemMatch: {
            startTime: {
                $gte: ISODate("2017-02-04T00:00:00.000Z"),
                $lte: ISODate("2017-02-05T23:00:00.000Z")
            }
        }
    }
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM