J'ai des données comme ça dans 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 puis-je 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?
Réponses:
Vous souhaitez probablement effectuer une requête de plage, par exemple, tous les éléments créés après une date donnée:
J'utilise
$gte
(supérieur ou égal à), car cela est souvent utilisé pour les requêtes de date uniquement, où le composant d'heure est 00:00:00.Si vous voulez vraiment trouver une date égale à une autre date, la syntaxe serait
la source
ISODate
y a un wrapper pour l'objet js Date. Essayez quelque chose comme"createdAt" : new Date("2010-01-01")
. Pour une raison quelconque, ce code ne fonctionne cependant pas (pour la version 2.0.2) dans la console Mongo.new Date("2010/01/01");
si vous voulez obtenir des articles n'importe où à cette date, vous devez comparer deux dates
Vous pouvez créer deux dates à partir de la première comme celle-ci, pour obtenir le début de la journée et la fin de la journée.
la source
Je viens d'implémenter quelque chose de similaire dans Mongo v3.2.3 en utilisant Node v0.12.7 et v4.4.4 et j'ai utilisé:
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 dans une requête .aggregate () $ match, il n'aime pas la fonction toISOString!
la source
Si vous voulez obtenir toutes les nouvelles choses au cours des 5 dernières minutes, vous devrez faire quelques calculs, mais ce n'est pas difficile ...
Créez d'abord un index sur la propriété sur laquelle vous souhaitez faire correspondre (incluez la direction de tri -1 pour décroissant et 1 pour croissant)
Recherchez ensuite les documents créés au cours des 5 dernières minutes (60 secondes * 5 minutes) .... car le javascript
.getTime()
renvoie des millisecondes dont vous devez multiplier par 1000 avant de l'utiliser comme entrée pour lenew Date()
constructeur.Explication pour
new Date(new Date().getTime()-60*5*1000).toISOString()
est la suivante:On calcule d'abord "il y a 5 minutes":
new Date().getTime()
nous donne l'heure actuelle en millisecondes5*60*1000
- Je multiplie juste par60
secondes donc c'est facile à changer. Je peux changer5
de120
si je veux 2 heures (120 minutes).new Date().getTime()-60*5*1000
nous donne1484383878676
(il y a 5 minutes en ms)Maintenant, nous devons l'introduire dans un
new Date()
constructeur 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 donne2017-01-14T08:53:17.586Z
Bien sûr, c'est un peu plus facile avec les variables si vous utilisez le pilote natif de node-mongodb, mais cela fonctionne dans le shell mongo qui est ce que j'utilise habituellement pour vérifier les choses.
la source
Date.now()
place denew Date().getTime()
Vous pouvez également essayer:
la source
Si vous utilisez Mongoose,
la source
Trouvez avec une date précise:
Trouvez avec plus
gte
ou moinslt
:Rechercher par gamme:
la source