2013-12-13 15 views
28

Tôi đang sử dụng nodej với trình điều khiển gốc-mongodb nút (http://mongodb.github.io/node-mongodb-native/).MongoDB + nodejs: cách truy vấn các trường ISODate?

Tôi có tài liệu có thuộc tính ngày được lưu trữ là loại ISODate.

Qua nodejs, Tôi đang sử dụng truy vấn này:

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

Nó trả về không có gì. Để làm cho nó hoạt động, tôi cần phải làm như sau:

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

Nhưng ISODate không được nhận dạng trong mã nút của tôi.

Vậy làm cách nào để tạo truy vấn đối với các trường ngày tháng mong muốn thông qua chương trình nút của tôi?

Cảm ơn bạn

Trả lời

40

Bạn có thể sử dụng new Date('2013-12-12T16:00:00.000Z') trong node.js;

new là phải, bởi vì Date() đã được sử dụng để trả về chuỗi ngày.

ISODATE được định nghĩa trong mongodb, bạn có thể sử dụng nó trong giao diện điều khiển mongodb, nhưng nó có thể khác với ngôn ngữ lập trình khác nhau.

+0

im thực sự có một thời gian cực kỳ khó khăn với điều này ... tôi không thể dường như lưu trữ một utc isodate ở mongo để cứu mạng tôi ... http://stackoverflow.com/questions/26874993/javascript-momentjs -convert-utc-from-string-to-date-object – Cmag

3

Bạn có thể sử dụng điều này, đối với tôi làm việc một cách hoàn hảo

//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

chúng ta cần phải sử dụng new Date() là lựa chọn tốt nhất để có được dữ liệu.

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" 
     } 
    } 
    } 
]) 
Các vấn đề liên quan