2013-12-13 13 views
28

Ich verwende nodejs mit dem node-mongodb-nativen Treiber (http://mongodb.github.io/node-mongodb-native/).MongoDB + nodejs: Wie ISODate Felder abfragen?

Ich habe Dokumente mit einer Eigenschaft Datum als ISODate Typ gespeichert.

Durch NodeJS, ich bin mit dieser Abfrage:

db.collection("log").find({ 
    localHitDate: { 
      '$gte': '2013-12-12T16:00:00.000Z', 
      '$lt': '2013-12-12T18:00:00.000Z' 
    } 
}) 

Es hat nichts zurückgibt. Damit es funktioniert muss ich stattdessen folgendes tun:

db.collection("log").find({ 
    localHitDate: { 
      '$gte': ISODate('2013-12-12T16:00:00.000Z'), 
      '$lt': ISODate('2013-12-12T18:00:00.000Z') 
    } 
}) 

Aber ISODate ist in meinem NodeJS Code nicht erkannt.

Also, wie kann ich über mein Nodejs-Programm eine Abfrage gegen Mongo-Datumsfelder machen?

Danke

Antwort

40

Sie new Date('2013-12-12T16:00:00.000Z') in node.js verwenden können;

new ist ein Muss, da Date() bereits verwendet wird, um Datumszeichenfolge zurückzugeben.

ISODate ist in mongodb konzipiert, Sie können es in mongodb Konsole verwenden, aber es kann für verschiedene Programmiersprachen unterschiedlich sein.

+0

im wirklich eine Super schwierige Zeit mit diesem haben ... Ich kann nicht scheinen, einen utc isodate in Mongo zu speichern mein Leben zu retten ... http://stackoverflow.com/questions/26874993/javascript-momentjs -convert-utc-from-string-to-date-Objekt – Cmag

3

Sie diese verwenden können, für mich perfekt

//lets require/import the mongodb native drivers. 
var mongodb = require('mongodb'); 

//We need to work with "MongoClient" interface in order to connect to a mongodb server. 
var MongoClient = mongodb.MongoClient; 

// Connection URL. This is where your mongodb server is running. 
var url = 'mongodb://localhost/klevin'; 

// Use connect method to connect to the Server 
MongoClient.connect(url, function (err, db) { 

    if (err) { 
    console.log('Unable to connect to the mongoDB server. Error:', err); 
    } else { 
    //HURRAY!! We are connected. :) 
    console.log('Connection established to', url); 


    // Get the documents collection 
    var collection = db.collection('frames'); 

    //We have a cursor now with our find criteria 
    var cursor = collection.find({ 
     tv: 'tematv', 
     date_created: {"$gte": new Date("2015-10-01T00:00:00.000Z") , "$lt": new Date("2017-03-13T16:17:36.470Z") }}); 

    //We need to sort by age descending 
    cursor.sort({_id: -1}); 

    //Limit to max 10 records 
    cursor.limit(50); 

    //Skip specified records. 0 for skipping 0 records. 
    cursor.skip(0); 


    //Lets iterate on the result 
    cursor.each(function (err, doc) { 

     if (err) { 

     console.log(err); 

     } else { 

     console.log('Fetched:', doc); 

     if(doc !== null){ 

     } 

     } 
    }); 


    } 

}); 
0

arbeiteten wir new Date() ist beste Option zu bekommen, die Daten verwenden müssen.

db.getCollection('orders').aggregate([ 
    { 
    '$match': { 
     $and: [ 
     { 
      status: 'UNASSIGNED' 
     }, 
     { 
      plannedDeliveryDate: { 
      '$eq': new Date('2017-10-09') 
      } 
     } 
     ] 
    } 
    }, 
    { 
    $lookup: { 
     from: "servicelocations", 
     localField: "serviceLocationId", 
     foreignField: "serviceLocationId", 
     as: "locations" 
    } 
    }, 
    { 
    $unwind: "$locations" 
    }, 
    { 
    "$project": { 
     "accountId": 1, 
     "orderId": 1, 
     "serviceLocationId": 1, 
     "orderDate": 1, 
     "description": 1, 
     "serviceType": 1, 
     "orderSource": 1, 
     "takenBy": 1, 
     "plannedDeliveryDate": 1, 
     "plannedDeliveryTime": 1, 
     "actualDeliveryDate": 1, 
     "actualDeliveryTime": 1, 
     "deliveredBy": 1, 
     "size1": 1, 
     "size2": 1, 
     "size3": 1, 
     "jobPriority": 1, 
     "cancelReason": 1, 
     "cancelDate": 1, 
     "cancelBy": 1, 
     "reasonCode": 1, 
     "reasonText": 1, 
     "status": 1, 
     "lineItems": 1, 
     "locations": { 
     "lng": "$locations.location.lng", 
     "lat": "$locations.location.lat" 
     } 
    } 
    } 
])