我是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") }
为什么会这样?为什么这是返回此文档的查询?
答案 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/