使用mongo中的$ gte和$ lt运算符作为日期字段

时间:2017-09-29 02:06:02

标签: mongodb

我是mongo的新手,所以我希望我在这里缺少一些简单的东西。我有28个文件,其中包含以下create_timestamp -

{ "id" : NumberLong(96), "create_timestamp" : ISODate("2017-09-18T09:00:00Z") }
{ "id" : NumberLong(97), "create_timestamp" : ISODate("2017-09-20T15:37:51.575Z") }
{ "id" : NumberLong(104), "create_timestamp" : ISODate("2017-09-20T15:37:51.575Z") }
{ "id" : NumberLong(106), "create_timestamp" : ISODate("2017-09-20T15:37:51.575Z") }
{ "id" : NumberLong(109), "create_timestamp" : ISODate("2017-09-20T15:37:51.575Z") }
{ "id" : NumberLong(110), "create_timestamp" : ISODate("2017-09-20T15:37:51.575Z") }
{ "id" : NumberLong(120), "create_timestamp" : ISODate("2017-09-20T15:37:51.575Z") }
{ "id" : NumberLong(121), "create_timestamp" : ISODate("2017-09-20T15:37:51.575Z") }
{ "id" : NumberLong(122), "create_timestamp" : ISODate("2017-09-20T15:37:51.575Z") }
{ "id" : NumberLong(124), "create_timestamp" : ISODate("2017-09-20T15:37:51.575Z") }
{ "id" : NumberLong(125), "create_timestamp" : ISODate("2017-09-20T15:37:51.575Z") }
{ "id" : NumberLong(126), "create_timestamp" : ISODate("2017-09-20T15:37:51.575Z") }
{ "id" : NumberLong(128), "create_timestamp" : ISODate("2017-09-20T15:37:51.575Z") }
{ "id" : NumberLong(129), "create_timestamp" : ISODate("2017-09-20T15:37:51.575Z") }
{ "id" : NumberLong(130), "create_timestamp" : ISODate("2017-09-20T15:37:51.575Z") }
{ "id" : NumberLong(132), "create_timestamp" : ISODate("2017-09-20T15:37:51.575Z") }
{ "id" : NumberLong(136), "create_timestamp" : ISODate("2017-09-20T15:37:51.575Z") }
{ "id" : NumberLong(140), "create_timestamp" : ISODate("2017-09-20T15:37:51.575Z") }
{ "id" : NumberLong(145), "create_timestamp" : ISODate("2017-09-20T15:37:51.575Z") }
{ "id" : NumberLong(150), "create_timestamp" : ISODate("2017-09-20T15:37:51.575Z") }

我使用create_timestamp> = ISODate(“2017-09-19”)AND查询所有文档 create_timestamp< ISODate( “二零一七年九月二十日”)。我期待看到没有。但是我看到了这一点。

  

db.transfer_order.find({$ and:[{“create_timestamp”:{$ gte:ISODate(“2017-09-19”)},“create_timestamp”:{$ lt:ISODate(“2017-09-” 20“)}}]},{_ id:0,id:1,create_timestamp:1})

{ "id" : NumberLong(96), "create_timestamp" : ISODate("2017-09-18T09:00:00Z") }

为什么会这样?为什么这是返回此文档的查询?

1 个答案:

答案 0 :(得分:0)

您正在用第二个覆盖第一个create_timestamp键值。

你有效地查询

db.transfer_order.find( 
{ $and: [ {"create_timestamp": { $lt: ISODate("2017-09-20")}}]}, 
{id: 1, create_timestamp: 1})

当查询多个值的相同键时,可以使用隐式和。

db.transfer_order.find( 
{"create_timestamp": { $gte: ISODate("2017-09-19"), $lt: ISODate("2017-09-20")}}, 
{id: 1, create_timestamp: 1})

使用显式anding

db.transfer_order.find( 
{ $and: [ {"create_timestamp": { $gte: ISODate("2017-09-19")}}, {"create_timestamp": { $lt: ISODate("2017-09-20")}}]}, 
{id: 1, create_timestamp: 1})

更多https://docs.mongodb.com/manual/reference/operator/query/and/