Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb 如何比较文档中的两个日期字段,其中一个嵌入到数组中?_Mongodb - Fatal编程技术网

Mongodb 如何比较文档中的两个日期字段,其中一个嵌入到数组中?

Mongodb 如何比较文档中的两个日期字段,其中一个嵌入到数组中?,mongodb,Mongodb,我试图比较两个指定为$type=“date”的字段,但是当我尝试查询时,得到的结果为0。 我的最终目标是输出s.status=6和s.time

我试图比较两个指定为$type=“date”的字段,但是当我尝试查询时,得到的结果为0。 我的最终目标是输出s.status=6和s.time
db.inventory.insertMany( [ 
 {  item: "canvas","r" : {"$date" : "2019-05-23T00:00:00.000+0000"},"s" :[{ "status" : 1, "time" : { "$date" : "2019-05-23T23:03:10.000+0000" } }, { "status" : 2, "time" : { "$date" : "2019-05-23T23:05:03.000+0000" } }, { "status" : 4, "time" : { "$date" : "2019-05-23T23:05:06.000+0000" } }, { "status" : 5, "time" : { "$date" : "2019-05-23T23:05:07.000+0000" } }, { "status" : 6, "time" : { "$date" : "2019-05-23T23:05:09.000+0000" } } ]},
 { item: "paper","r" : { "$date" : "2019-05-24T06:00:00.000+0000" }, "s" :  [ { "status" : 1, "time" : { "$date" : "2019-05-23T23:03:10.000+0000" } }, { "status" : 2, "time" : { "$date" : "2019-05-23T23:05:03.000+0000" } }, { "status" : 3, "time" : { "$date" : "2019-05-23T23:05:06.000+0000" } }, { "status" : 4, "time" : { "$date" : "2019-05-25T05:05:07.000+0000" } }, { "status" : 6, "time" : { "$date" : "2019-05-25T05:55:09.000+0000" } } ] },
 { item: "stone","r" : { "$date" : "2019-05-23T05:00:00.000+0000" }, "s" : [ { "status" : 1, "time" : { "$date" : "2019-05-23T23:03:10.000+0000" } }, { "status" : 2, "time" : { "$date" : "2019-05-23T23:05:03.000+0000" } } ] },
 { item: "mass","r" : {"$date" : "2019-05-24T06:00:00.000+0000"},"s" :[ { "status" : 1, "time" : { "$date" : "2019-05-23T23:03:10.000+0000" } }, { "status" : 2, "time" : { "$date" : "2019-05-23T23:05:03.000+0000" } }, { "status" : 4, "time" : { "$date" : "2019-05-23T23:05:06.000+0000" } }, { "status" : 5, "time" : { "$date" : "2019-05-23T23:05:07.000+0000" } }, { "status" : 6, "time" : { "$date" : "2019-05-24T06:06:09.000+0000" } } ] },
 {item : "paper","r" : {"$date" : "2019-05-24T06:00:00.000+0000" },"s" :[ { "status" : 1, "time" : { "$date" : "2019-05-23T23:03:10.000+0000" } }, { "status" : 2, "time" : { "$date" : "2019-05-23T23:05:03.000+0000" } }, { "status" : 4, "time" : { "$date" : "2019-05-23T23:05:06.000+0000" } }, { "status" : 5, "time" : { "$date" : "2019-05-23T23:05:07.000+0000" } }, { "status" : 6, "time" : { "$date" : "2019-05-24T06:06:09.000+0000" } } ] }
]);
我试过的-

db.inventory.find({"s": {"$elemMatch" : {"status" : 6,"time" : { "$lt" : ISODate(this.r)}}});

我没有收到任何错误结果。

到目前为止,
$elemMatch
不支持与字段进行比较

以下查询可以获得预期的输出:

db.inventory.find({
    $expr:{
        $gt:[
            {
                $size:{
                    $filter:{
                        "input":"$s",
                        "as":"doc",
                        "cond":{
                            $and:[
                                {
                                    $eq:["$$doc.status",6]
                                },
                                {
                                    $lt:["$$doc.time","$r"]
                                }
                            ]
                        }
                    }
                }
            },
            0
        ]
    }
}).pretty()

字段“r.$date”是字符串类型,不是日期类型。子文档中定义的“s”数组中的日期也是如此。这些需要是日期类型以进行比较(作为日期)。@prasad(
r
ISODate
类型,即
{“r”:ISODate(“2019-05-23T00:00:00.000+0000”)
{“r”:{“$date”:“2019-05-23T00:00:00.000+0000”}
是相同的,并且
r.$date
甚至不是一个字段。@Mr.S.Sharma在运行
db.inventory.insertMany([
在问题帖中,尝试以下命令:
db.dates.find({r.$date:{$type:'date}})
db.dates.find({“r.$date”:{$type:'string'})
。结果显示,
$date
字段是一个字符串类型(而不是日期类型字段)。@prasad\u我试图传达的观点是,
{$date:}
ISODate(“”)的扩展形式
。因此,我们可以直接查询
r
,而不是查询
r.$date
。请参阅@Mr.S.Sharma{$date:“}不是ISODate(“”)的扩展形式。它是JSON的扩展格式。