1
當我想要mongo和AND兩個條件時,結果不一致。當我明確$和他們時,一切都很好。Mongodb不一致隱式和/或
> db.test.insert({t:ISODate("2014-03-28")})
> db.test.find({t:ISODate("2014-03-28")})
{ "t" : ISODate("2014-03-28T00:00:00Z") }
隔離條件句,所有的好:
> db.test.find({t:{"$lte":ISODate("2014-03-27")}})
> db.test.find({t:{"$gte":ISODate("2014-03-27")}})
{ "t" : ISODate("2014-03-28T00:00:00Z") }
> db.test.find({t:{"$gte":ISODate("2014-03-29")}})
> db.test.find({t:{"$lte":ISODate("2014-03-29")}})
{ "t" : ISODate("2014-03-28T00:00:00Z") }
這些工作,你會從一個隱含的 「和」 期待:
> db.test.find({t:{"$gte":ISODate("2014-03-27")},t:{"$lte":ISODate("2014-03-27")}})
> db.test.find({t:{"$lte":ISODate("2014-03-29")},t:{"$gte":ISODate("2014-03-29")}})
> db.test.find({t:{"$gte":ISODate("2014-03-27")},t:{"$lte":ISODate("2014-03-29")}})
{ "t" : ISODate("2014-03-28T00:00:00Z") }
> db.test.find({t:{"$lte":ISODate("2014-03-29")},t:{"$gte":ISODate("2014-03-27")}})
{ "t" : ISODate("2014-03-28T00:00:00Z") }
然而,這些的行爲像 「或」:
> db.test.find({t:{"$lte":ISODate("2014-03-27")},t:{"$gte":ISODate("2014-03-27")}})
{ "t" : ISODate("2014-03-28T00:00:00Z") }
> db.test.find({t:{"$gte":ISODate("2014-03-29")},t:{"$lte":ISODate("2014-03-29")}})
{ "t" : ISODate("2014-03-28T00:00:00Z") }
而一切正常預計,無論訂單,明確的「$和」「
> db.test.find({"$and": [{t:{"$lte":ISODate("2014-03-27")}},{t:{"$gte":ISODate("2014-03-27")}}]})
> db.test.find({"$and": [{t:{"$gte":ISODate("2014-03-27")}},{t:{"$lte":ISODate("2014-03-27")}}]})
> db.test.find({"$and": [{t:{"$gte":ISODate("2014-03-29")}},{t:{"$lte":ISODate("2014-03-29")}}]})
> db.test.find({"$and": [{t:{"$lte":ISODate("2014-03-29")}},{t:{"$gte":ISODate("2014-03-29")}}]})
任何想法是怎麼回事?