2017-05-02 13 views
0

が私は問題が定義されていない、これは私のコードです:pymongo:名「ISODateは、」私はpymongoとMongoDBのデータを選択しようとすると、

import pymongo 
from pymongo import MongoClient 
import sys 
from datetime import datetime 

try: 
    conn=pymongo.MongoClient('10.33.109.228',27017) 
    db=conn.mnemosyne 
    data_ip=db.session.aggregate({'$match':{'timestamp':{'$gte': ISODate('2016-11-11T00:00:00.000Z'),'$lte': ISODate('2016-11-11T23:59:59.000Z')}}},{'$group':{'_id':'$source_ip'}}) 
    for f in data_ip: 
     print f['_id'] 

except pymongo.errors.ConnectionFailure, e: 
    print "Could not connect to MongoDB: %s" % e 

と私はそれを実行したとき、私は、このようないくつかのエラーがあります:これはMyDatabaseというの構成例は、

{ "_id" : "60.18.133.207" } 
{ "_id" : "178.254.52.96" } 
{ "_id" : "42.229.218.192" } 
{ "_id" : "92.82.171.117" } 
{ "_id" : "103.208.120.205" } 
{ "_id" : "185.153.208.142" } 

です:

Traceback (most recent call last): 
    File "test.py", line 9, in <module> 
    data_ip=db.session.aggregate({'$match':{'timestamp':{'$gte': ISODate('2016-11-11T00:00:00.000Z'),'$lte': ISODate('2016-11-11T23:59:59.000Z')}}},{'$group':{'_id':'$source_ip'}}) 
NameError: name 'ISODate' is not defined 

は、私はこのような結果を望ん

> db.session.findOne() 

    { 
      "_id" : ObjectId("5786398d1f50070f31f27f7c"), 
      "protocol" : "epmapper", 
      "hpfeed_id" : ObjectId("5786398d1f50070f31f27f7b"), 
      "timestamp" : ISODate("2016-07-13T12:52:29.112Z"), 
      "source_ip" : "23.251.55.182", 
      "source_port" : 2713, 
      "destination_port" : 135, 
      "identifier" : "d3374f14-48f7-11e6-9e19-0050569163b4", 
      "honeypot" : "dionaea" 
    } 

javascriptの環境であるモンゴシェル、関数である、それは、Python内で使用可能ではありません、私はエラーに

答えて

3

ISODateを修正するために助けてください。

あなたは MongoDBに日時を挿入したい場合は、単純に次の操作を行うことができ、 PyMongoを使用して、PythonでDateTimeオブジェクトに文字列を変換するための

import dateutil.parser 
dateStr = "2016-11-11T00:00:00.000Z" 
dateutil.parser.parse(dateStr) # returns a datetime.datetime(2016, 11, 11, 00, 0, tzinfo=tzutc()) 

dateutilを使用することができます

import pymongo 
import dateutil 
dateStr = '2016-11-11T00:00:00.000Z' 
myDatetime = dateutil.parser.parse(dateStr) 
client = pymongo.MongoClient() 
client.db.collection.insert({'date': myDatetime}) 
+1

その作業は、助けのためにあなたをとても感謝します – user7059470

0

ISODateはJavaScript Dateオブジェクトです。 PyMongoを使って日付の範囲を照会するには、mongodが適切なBSON型に変換するdatetime.datetimeインスタンスを使用する必要があります。第三者図書館は必要ありません。

また、_idフィールドはコレクション内で一意であるため、distinct()メソッドではこれが完璧な仕事になるため、集計フレームワークを使用しないでください。

import datetime 


start = start = datetime.datetime(2016, 11, 11) 
end = datetime(2016, 11, 11, 23, 59, 59) 

db.session.distinct('_id', {'timestamp': {'$gte': start, '$lte': end}}) 

あなたが本当にaggregate()メソッドを使用する必要がある場合は、あなたの$matchステージは次のようになります。

{'$match': {'timestamp': {'$gte': start, '$lte': end}}} 
関連する問題