为什么在我的情况下$ gte和$ lte在mongoDB中不起作用

时间:2019-06-22 20:18:23

标签: node.js mongodb

我有以下文件。

{ 
   "_id" : ObjectId("5d0e4232ccfb3ee9ac72a64d"), 
   "arraydatumobject" : {
       "datum" : ISODate("2010-01-02T00:00:00.000+0000")
   }
}

当我尝试用$ gte或$ lte甚至两者都找不到日期时,我找不到该文档。

是这样的:

db.getCollection("test").find(
   {
       arraydatumobject : { $elemMatch:{ datum :  {$gte : new ISODate("2008-01-02"), $lte : new ISODate("2011-01-02")}}}
   }
)

或这个

db.getCollection("test").find(
    {
        arraydatumobject : {datum :  {$gte : new ISODate("2008-01-02"), $lte : new ISODate("2011-01-02")}}
    }
)

什么也没给我。

但是当我使用以下内容时,我确实会得到结果。

db.getCollection("test").find(
    {
        arraydatumobject : {datum : new ISODate("2010-01-02")}
    }
)

我正在获取要搜索的文档...

我在这里想念什么?

2 个答案:

答案 0 :(得分:0)

您的第二个示例应该可以使用,但是那里缺少一对花括号。

此外,您应该使用node.js Date,而不是ISODate s

进行比较。

尝试:

db.getCollection("test").find(
    {
        arraydatumobject : {datum :  {$gte : new Date(2008,2,1), $lte : new Date(2011, 2, 1)}}
    }
)

答案 1 :(得分:0)

具有给定的文档:

{ 
   "_id" : ObjectId("5d0e4232ccfb3ee9ac72a64d"), 
   "arraydatumobject" : {
       "datum" : ISODate("2010-01-02T00:00:00.000+0000")
   }
}

您的日期范围find查询应为:

db.getCollection('test').find({ 
 'arraydatumobject.datum': {   // you have an object use obj.prop
    $gte : new ISODate("2008-01-02"), 
    $lte : new ISODate("2011-01-02")
  } 
})