我在mongodb中有一个这样的数据

{ 
    "latitude" : "", 
    "longitude" : "", 
    "course" : "", 
    "battery" : "0", 
    "imei" : "0", 
    "altitude" : "F:3.82V", 
    "mcc" : "07", 
    "mnc" : "007B", 
    "lac" : "2A83", 
    "_id" : ObjectId("4f0eb2c406ab6a9d4d000003"), 
    "createdAt" : ISODate("2012-01-12T20:15:31Z") 
}

如何查询db.gpsdata。找到({“createdAt”:? ?这里是什么??}),以便它从db返回上面的数据结果给我?


当前回答

如果你想在那个日期的任何地方买东西,你需要比较两个日期

你可以在第一个日期的基础上创建两个日期,分别是一天的开始和一天的结束。

var startDate = new Date(); // this is the starting date that looks like ISODate("2014-10-03T04:00:00.188Z")

startDate.setSeconds(0);
startDate.setHours(0);
startDate.setMinutes(0);

var dateMidnight = new Date(startDate);
dateMidnight.setHours(23);
dateMidnight.setMinutes(59);
dateMidnight.setSeconds(59);

### MONGO QUERY

var query = {
        inserted_at: {
                    $gt:morning,
                    $lt:dateScrapedMidnight
        }
};

//MORNING: Sun Oct 12 2014 00:00:00 GMT-0400 (EDT)
//MIDNIGHT: Sun Oct 12 2014 23:59:59 GMT-0400 (EDT)

其他回答

找到一个特定的日期:

db.getCollection('CollectionName').find({"DepartureDate" : new ISODate("2019-06-21T00:00:00.000Z")})

发现有较大的gte或较小的lt:

db.getCollection('CollectionName').find({"DepartureDate" : { $gte : new ISODate("2019-06-11T00:00:00.000Z") }})

按范围查找:

db.getCollection('CollectionName').find({ 
    "DepartureDate": { 
        $lt: new Date(), 
        $gte: new Date(new Date().setDate(new Date().getDate()-15))
      } 
    })

如果你想从一个datetime获取一个记录,你可以使用以下方法:

(mongodbCompass 3.6.8 with PyMongo)

mongo.db.collection.aggregate([{"$match":{"object.object.key":{"$gte":ISODate('2021-01-27T00:00:00Z').toISOString()}}}])

db.collection.find({"object.object.key":{"$gte":ISODate('2021-01-27T00:00:00Z').toISOString()}})

你可能想要做一个范围查询,例如,在给定日期之后创建的所有项:

db.gpsdatas.find({"createdAt" : { $gte : new ISODate("2012-01-12T20:15:31Z") }});

我使用$gte(大于或等于),因为这通常用于仅限日期的查询,其中时间组件为00:00:00。

如果你真的想找到一个日期等于另一个日期,语法将是

db.gpsdatas.find({"createdAt" : new ISODate("2012-01-12T20:15:31Z") });

刚刚在Mongo v3.2.3中使用Node v0.12.7和v4.4.4实现了类似的东西,并使用:

{ $gte: new Date(dateVar).toISOString() }

我传入了一个ISODate(例如2016-04-22T00:00:00Z),这适用于.find()查询,无论是否使用toISOString函数。但是当在.aggregate() $match查询中使用时,它不喜欢toISOString函数!

如果你正在使用猫鼬,

try {
  const data = await GPSDatas.aggregate([
    {
      $match: { createdAt : { $gt: new Date() }
    },
    {
      $sort: { createdAt: 1 }
    }
  ])
  console.log(data)

} catch(error) {
    console.log(error)
}