0

我有以下文件。

{ 
   "_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")}
    }
)

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

我在这里想念什么?

4

2 回答 2

1

使用给定的文件:

{ 
   "_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")
  } 
})
于 2019-06-23T02:55:03.933 回答
0

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

此外,您应该使用 node.js 进行比较Date,而不是ISODates

尝试:

db.getCollection("test").find(
    {
        arraydatumobject : {datum :  {$gte : new Date(2008,2,1), $lte : new Date(2011, 2, 1)}}
    }
)
于 2019-06-22T20:23:35.303 回答