mongodb - 如何在 Mongodb 中的查询评估条件表达式中使用字段?

标签 mongodb mongodb-query

在 Mongodb 中,我有一个任务集合,其中包含以下字段以及其他 25 个字段

1. timeToLive - holds the number of minutes
2. createdDate - holds the ISODate 

我需要编写一个查询,它只会返回未过期的任务。我正在尝试类似以下内容:

db.tasks.find({"timeToLive":{$gt:((new Date().getTime()-createdDate)/60000)}},{_id:1, createdDate:1, timeToLive:1}) 

问题是 mongo 无法将 $gt 表达式中的createdDate 识别为文档中的字段。我收到以下错误:

2015-05-16T16:47:03.573-0400 E QUERY ReferenceError: createdDate is not defined at (shell):2:48

如何在那里写入字段名称,以便将其视为字段而不是变量?我尝试将字段名称放在双引号中,但随后它被视为字符串文字。

感谢任何帮助。

最佳答案

您无法在常规 MongoDB 查找查询中执行此操作。但幸运的是,使用 Mongo 的聚合框架可以通过以下方式达到您想要的结果:

db.tasks.aggregate([
    {$project: 
        {
           timeToLive: 1, 
           createdDate: 1, 
           expired:
           {
               $gt: [
                   {
                      $divide: [
                          {
                             $subtract: [new Date(), "$createdDate"]
                          }, 
                          60000
                       ]
                   },
                   "$timeToLive"
                ]
            }
        }
    }, 
    {$match:
        {
            expired: false
        }
    }, 
    {$project: 
        {
           timeToLive: 1, 
           createdDate: 1
        }
    }
])

关于mongodb - 如何在 Mongodb 中的查询评估条件表达式中使用字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30280646/

相关文章:

python - mongoengine如何过滤字段不为空?

mongodb - mongo中将多个子文档合并成一个新文档

javascript - Mongodb 聚合管道新日期

mongodb - 在不知道字段名称的情况下通过 MongoDB 子文档查询时可以使用索引吗?

mongodb - KMongo 查询从 Mongo Shell 产生不同的结果

node.js - 如果未找到 ID,Mongoose 更新文档或插入新文档(Express REST API)

javascript - 在 Mongodb 中根据年份查找文档

mongodb - 如何使用 MongoDB 对 "likes"投票系统进行建模

node.js - MongoError : attempt to write outside buffer bounds

C# MongoDB Filter 返回整个对象