J'ai une donnée comme celle-ci chez 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")
}
Comment interroger db.gpsdatas.find({'createdAt': ??what here??})
afin qu'il me renvoie le résultat des données ci-dessus à partir de la base de données?
Vous voulez probablement faire une requête de plage, par exemple, tous les éléments créés après une date donnée:
db.gpsdatas.find({"createdAt" : { $gte : new ISODate("2012-01-12T20:15:31Z") }});
J'utilise $gte
(supérieur ou égal à), car il est souvent utilisé pour les requêtes de type date uniquement, où le composant heure est 00:00:00.
Si vous voulez vraiment trouver une date égale à une autre date, la syntaxe serait la suivante:
db.gpsdatas.find({"createdAt" : new ISODate("2012-01-12T20:15:31Z") });
Vous pouvez créer deux dates sur la première comme celle-ci, pour obtenir le début et la fin de la journée.
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)
Je viens juste de mettre en œuvre quelque chose de similaire dans Mongo v3.2.3 en utilisant Node v0.12.7 et v4.4.4 et utilisé:
{ $gte: new Date(dateVar).toISOString() }
Je passe un ISODate (par exemple, 2016-04-22T00: 00: 00Z) et cela fonctionne pour une requête .find () avec ou sans la fonction toISOString. Mais lors de l'utilisation d'une requête .aggregate () $ match, il n'aime pas la fonction toISOString!
Si vous voulez avoir toutes les nouvelles choses au cours des 5 dernières minutes, vous devrez faire des calculs, mais ce n'est pas difficile ...
Commencez par créer un index sur la propriété que vous souhaitez associer (indiquez le sens du tri -1 pour décroissant et 1 pour croissant)
db.things.createIndex({ createdAt: -1 }) // descending order on .createdAt
Interrogez ensuite les documents créés au cours des 5 dernières minutes (60 secondes * 5 minutes) .... car la fonction .getTime()
de javascript renvoie des millisecondes dont vous avez besoin de plusieurs milliers avant de l'utiliser comme entrée du constructeur new Date()
.
db.things.find({
createdAt: {
$gte: new Date(new Date().getTime()-60*5*1000).toISOString()
}
})
.count()
L'explication de new Date(new Date().getTime()-60*5*1000).toISOString()
est la suivante:
Nous calculons d'abord "il y a 5 minutes":
new Date().getTime()
nous donne l'heure actuelle en millisecondes5*60*1000
- Je multiplie simplement par 60
secondes pour qu'il soit facile de changer. Je peux simplement changer 5
en 120
si je veux 2 heures (120 minutes).new Date().getTime()-60*5*1000
nous donne 1484383878676
(Il y a 5 minutes en ms)Nous devons maintenant alimenter cela dans un constructeur new Date()
pour obtenir le format de chaîne ISO requis par les horodatages MongoDB.
{ $gte: new Date(resultFromAbove).toISOString() }
(requête mongodb .find ())new Date(new Date().getTime()-60*5*1000)
.toISOString()
new Date(new Date().getTime()-60*5*1000).toISOString()
nous donne 2017-01-14T08:53:17.586Z
Bien sûr, cela est un peu plus facile avec les variables si vous utilisez le pilote node-mongodb-native, mais cela fonctionne dans le shell mongo, ce que j’utilise habituellement pour vérifier certaines choses.
Vous pouvez aussi essayer:
{
"dateProp": { $gt: new Date('06/15/2016').getTime() }
}
Si vous utilisez Mongoose,
try {
const data = await GPSDatas.aggregate([
{
$match: { createdAt : { $gt: new Date() }
},
{
$sort: { createdAt: 1 }
}
])
console.log(data)
} catch(error) {
console.log(error)
}
Trouver avec une date spécifique:
db.getCollection('CollectionName').find({"DepartureDate" : new ISODate("2019-06-21T00:00:00.000Z")})
Trouver avec plus de gte
ou peu lt
:
db.getCollection('CollectionName').find({"DepartureDate" : { $gte : new ISODate("2019-06-11T00:00:00.000Z") }})
Rechercher par gamme:
db.getCollection('CollectionName').find({
"DepartureDate": {
$lt: new Date(),
$gte: new Date(new Date().setDate(new Date().getDate()-15))
}
})