MongoDB + nodejs: как запрашивать поля ISODate?
Я использую nodejs с родным драйвером node -mongodb (http://mongodb.github.io/node-mongodb-native/).
У меня есть документы с свойством date, сохраненным как ISODate
.
Через nodejs я использую этот запрос:
db.collection("log").find({
localHitDate: {
'$gte': '2013-12-12T16:00:00.000Z',
'$lt': '2013-12-12T18:00:00.000Z'
}
})
Он ничего не возвращает. Чтобы заставить его работать, мне нужно сделать следующее:
db.collection("log").find({
localHitDate: {
'$gte': ISODate('2013-12-12T16:00:00.000Z'),
'$lt': ISODate('2013-12-12T18:00:00.000Z')
}
})
Но ISODate
не распознается в моем коде nodejs.
Итак, как я могу сделать запрос против полей даты mongo через мою программу nodejs?
Спасибо
Ответы
Ответ 1
Вы можете использовать new Date('2013-12-12T16:00:00.000Z')
в node.js
;
new
является обязательным, поскольку Date() уже используется для возврата строки даты.
ISODate разработан в mongodb, вы можете использовать его в консоли mongodb, но он может быть различным для разных языков программирования.
Ответ 2
Вы можете использовать это, для меня отлично работали
//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){
}
}
});
}
});
Ответ 3
нам нужно использовать новую дату(), чтобы получить данные.
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"
}
}
}
])