【问题标题】:Cast error when using $gt ,$gte, $lt ,$lte in mongodb在 mongodb 中使用 $gt ,$gte, $lt ,$lte 时出现转换错误
【发布时间】:2020-05-10 00:46:42
【问题描述】:

我有这样的文件

{
    "_id":"5dfa6e23ef4b260e8c23a70c",
    "username":"foo",
    "count":4,
    "log":[
            {"description":"Eat sandwich","duration":30,"date":1576454400000,"_id":"5dfa6e49ef4b260e8c23a70e"},
            {"description":"Eat sandwich","duration":300,"date":1576458700000,"_id":"5dfa6f1c2924c010b35c6b60"},
            {"description":"Eat sandwich","duration":400,"date":1576459000000,"_id":"5dfa6f3a2924c010b35c6b61"},
            {"description":"Eat sandwich","duration":400,"date":1576457400000,"_id":"5dfa6f702924c010b35c6b62"}

          ]
}

我正在尝试从这样的日期范围获取用户活动的活动。

Activities.findOne({username:"foo",log:{date:{$gt: 1576454400000, $lt: 1576458700000 }}},function(err,activities){
//Do something
});

无论类型是日期还是数字,我总是会收到转换错误。我几乎尝试了一切。我不知道我做错了什么。

【问题讨论】:

  • log:date 应改为log.date
  • @Subburaj 对不起,我打错了。请再次检查该部分。我已经更正了。
  • 我从 mongo shell 运行了您的查询并且没有 cast 错误。看我的回答。

标签: node.js mongodb mongoose


【解决方案1】:

对于帖子中的给定输入文档,以下查询匹配并返回该文档(注意:在 mongo shell 中)。

此查询使用$elemMatch:

db.test.findOne( { log: { $elemMatch: { date: { $gt: 1576454400000, $lte: 1576458700000 } } } } )

如果您不使用$elemMatch,则数组中的文档字段必须使用点(.)表示法指定;例如,"log.date"

db.test.findOne( { "log.date": { $gt: 1576454400000, $lte: 1576458700000 } } )

您使用的查询不会给出任何语法错误,但会返回错误的结果。

【讨论】:

  • 谢谢。当我使用 $elemMatch 时,我不再收到强制转换错误。现在,无论日期范围如何,我都会得到一个空对象。
  • 集合中有数据吗?您可以从 mongo shell 或 Compass 等进行检查吗?
  • 是的,有数据,现在无论范围如何,都会返回所有数据。该项目出现故障。我不知道故障是否与它有关。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-06
  • 1970-01-01
  • 2014-10-29
  • 1970-01-01
  • 2014-08-04
  • 1970-01-01
相关资源
最近更新 更多