web-dev-qa-db-fra.com

MongoDB + nodejs: comment interroger les champs ISODate?

J'utilise nodejs avec le pilote node-mongodb-native ( http://mongodb.github.io/node-mongodb-native/ ).

J'ai des documents avec une propriété de date stockée sous le type ISODate.

A travers nodejs, j'utilise cette requête:

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

Cela ne retourne rien. Pour que cela fonctionne, je dois plutôt procéder comme suit:

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

Mais ISODate n'est pas reconnu par mon code nodejs.

Alors, comment puis-je faire une requête contre les champs de date mongo via mon programme nodejs?

Je vous remercie

38
Fred Mériot

Vous pouvez utiliser new Date('2013-12-12T16:00:00.000Z') dans node.js;

newest indispensable, car Date () est déjà utilisé pour renvoyer une chaîne de date.

ISODate est conçu dans mongodb, vous pouvez l’utiliser dans la console mongodb, mais il peut être différent pour différents langages de programmation.

53
damphat

Vous pouvez l'utiliser, pour moi a parfaitement fonctionné

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

        }

      }
    });


  }

});
4
klevin

nous devons utiliser new Date () est la meilleure option pour obtenir les données.

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"
      }
    }
  }
])
0
KARTHIKEYAN.A