2012-11-09 17 views
15

Chcę ograniczyć zapytanie, które analizuję tylko w dokumentach utworzonych w ciągu ostatnich 24 godzin.MongoDB: pobierać tylko dokumenty utworzone w ciągu ostatnich 24 godzin?

Jaki jest najlepszy sposób struktury tego zapytania? Jak mogę ograniczać na podstawie daty?

+0

Ten link może pomóc http://stackoverflow.com/questions/8665731/find-last-document -of-the-day-for-the-last-7-days – Mihai

+0

Zacznij od [dokumenty na rodzimym sterowniku] (http://mongodb.github.com/node-mongodb-native/). Osobiście używam [mongoskin] (https://github.com/kissjs/node-mongoskin). Są też [mangusta] (http://mongoosejs.com/) i [inne] (https://npmjs.org/browse/keyword/mongodb). I oczywiście zobacz sam dokument [DB's docs] (http://www.mongodb.org/display/DOCS/Home) (w [queries] (http://www.mongodb.org/display/DOCS/Querying) i innych rzeczy). Jest też bezpłatny [M101: MongoDB dla programistów] (https://education.10gen.com/courses/10gen/M101/2012_Fall/about) od 10gen. – elmigranto

+0

@elmigranto Używam node-mongodb-native // ​​wiem, jak używać mongo i po prostu nie wiem najlepszy sposób na wykonanie tego zapytania. – boom

Odpowiedz

3

Przede wszystkim naprawdę pomogłoby, gdybyś przedstawił ludziom schemat swojej kolekcji.

Ale tylko dlatego, że już 3 godziny minęło i nikt nie odpowiedział Postaram:

Załóżmy, że masz ci wjazdu i ma createdAt dziedzinie, która jest ISODate:

{ 
somefield: "test", 
createdAt: ISODate("2012-08-13T04:00:00Z") 
} 

Więc co ty Wystarczy umieścić wskaźnik na tym polu

db.yourColl.ensureIndex({createdAt:1}); 

Następnie pojawi się aktualna godzina w node.js zastąpić swoje 24 godzin i uzyskać wartość start. (O ile wiem, nie ma analog Teraz w mongdb. Prawy mi kogoś, jeśli się mylę.)

db.yourColl.find({ 
    createdAt: { 
    $gte: start 
    } 
}); 
13

Jeśli nie używasz żadnych innych indeksów i są przy użyciu domyślnego objectID jako _id, można wykonać następujące czynności:

db.collection.find({ 
    _id: { 
    $gt: ObjectID.createFromTimestamp(Date.now()*1000 - 24*60*60) 
    } 
}, callback) 
+1

Nie można wykonać JavaScript: ReferenceError: ObjectID nie jest zdefiniowany – DanFromGermany

+1

TypeError: Object function ObjectId() {[native code]} nie ma metody 'createFromTimestamp' – DanFromGermany

+2

my bad, "createFromTime". mogli to zmienić: http://mongodb.github.io/node-mongodb-native/api-bson-generated/objectid.html # objectid-createfromtime –

7

dla nikogo innego lądowania tutaj poprzez google, można to zrobić w powłoce Mongo następująco:

db.collection.find({ $where: function() { return Date.now() - this._id.getTimestamp() < (24 * 60 * 60 * 1000) } }) 
+1

Uważaj z '$ where' http: // docs .mongodb.org/manual/reference/operator/query/where/# op._S_where Ma problemy z wydajnością. –

8

Dodaj createdAt pola, indeks, a potem zapytać

db.getCollection("COLLECTION_NAME").find({"createdAt":{$gt:new Date(Date.now() - 24*60*60 * 1000)}}) 

Spowoduje to zwrócenie wszystkich rekordów starszych niż 86400 sekund.

1

"TIME" to dziedzina, która sklep datownik

db.your_collection_name.find({"TIME":{'$lt': new Date(),'$gte':new Date(new Date().setDate(new Date().getDate()-1))}},{}).count(); 
4

Użyj tego w mangusta

let ObjectId = require('mongodb').ObjectID; 

Property.find({ 
    _id: { 
     $gt: ObjectId.createFromTime(Date.now()/1000 - 24 * 60 * 60) 
    } 
}, (err, result) => { 
    console.log(err || result); 
}); 
Powiązane problemy