Node.js 使用';查询5天前的MongoDb记录_id';

Node.js 使用';查询5天前的MongoDb记录_id';,node.js,mongodb,date,Node.js,Mongodb,Date,我在网上读到,“\u id”在创建它的时候有一个时间戳,你可以根据日期查询它。这是我到目前为止尝试过的,但没有任何运气 var d = new Date(); d.setDate(d.getDate() - 5); collection.find( { }, { metal: 1, change: 1, percent: 1, _id: { $gte: d } } ).toArray(function(err, results) { console.log(results); });

我在网上读到,“\u id”在创建它的时候有一个时间戳,你可以根据日期查询它。这是我到目前为止尝试过的,但没有任何运气

var d = new Date();
d.setDate(d.getDate() - 5);

collection.find( { }, { metal: 1, change: 1, percent: 1, _id: { $gte: d } } ).toArray(function(err, results) {
    console.log(results);
});
Mongo中的数组:

[
    {
        "_id": "58e21b52524c0b0011fb92f4",
        "metal": "Palladium",
        "change": 3,
        "percent": "+0.38%"
    },
    {
        "_id": "58e21ee3524c0b0011fb92f5",
        "metal": "Gold",
        "change": 6,
        "percent": "+0.54%"
    },
    {
        "_id": "58e21ee3524c0b0011fb92f6",
        "metal": "Silver",
        "change": 0,
        "percent": "+0.77%"
    },
...
非常感谢@robertklep与我一起完成这项工作。如果其他人遇到这个问题,下面是一个解决方法

最新答复:

const ObjectID = require('mongodb').ObjectID;
var d = new Date();
d.setDate(d.getDate() - 1); //1 would be 1day
var _id = ObjectID.createFromTime(d.getTime() / 1000);

collection.find({ _id : { $gte : _id }}, { metal: 1, change: 1, percent: 1 }).toArray(function(err, results) {
  console.log(results);
   ...
});

您需要根据时间戳创建一个
ObjectID
,您可以使用:


之后,您可以使用
\u id
进行比较查询。

您需要根据时间戳创建一个
ObjectID
,您可以使用:


之后,您可以使用
\u id
进行比较查询。

我不确定
\u id
是否包含日期内容,但我怀疑您必须在运行查询之前执行
d.getTime()
您是否尝试过使用
ObjectId.getTimestamp()
方法根据文档-?我不确定
\u id
是否包含日期,但我怀疑您必须在运行查询之前执行
d.getTime()
您是否根据文档尝试使用
ObjectId.getTimestamp()
方法-?谢谢@robertklep-但是我在这里遇到了这个错误。我只想得到过去5天的所有记录。错误:“ObjectID未定义”谢谢@robertklep-差不多了。但是,在控制台记录“结果”时未定义。我应该改变什么吗?find({},{metal:1,change:1,percent:1,{$gte:d}).toArray(函数(err,results){console.log(results);});您应该删除
find
(空对象)的第一个参数:
collection.find({metal:1,…})
谢谢@robertklep-它现在正在返回一个空数组“[]”。我用我在mongo的记录更新了上面的问题like@user992731您的文档已经有将近一个月的历史了,我假设您的数据库中有与您正在测试的查询相匹配的文档?谢谢@robertklep-但是我在这里遇到了这个错误。我只想得到过去5天的所有记录。错误:“ObjectID未定义”谢谢@robertklep-差不多了。但是,在控制台记录“结果”时未定义。我应该改变什么吗?find({},{metal:1,change:1,percent:1,{$gte:d}).toArray(函数(err,results){console.log(results);});您应该删除
find
(空对象)的第一个参数:
collection.find({metal:1,…})
谢谢@robertklep-它现在正在返回一个空数组“[]”。我用我在mongo的记录更新了上面的问题like@user992731您的文档已经有将近一个月的历史了,我假设您的数据库中有与您正在测试的查询相匹配的文档?
const ObjectID = require('mongodb').ObjectID;

var d = new Date();
d.setDate(d.getDate() - 5);

var _id = ObjectID.createFromTime(d.getTime() / 1000); // timestamp should be in seconds