10

pymongo を使用して、いくつかの日付を mongodb にロードしています。pymongo は BSON への自動変換を行うため、datetime の datetime.strptime 関数を使用して、"12/04/2013" のような入力文字列を次のように Date オブジェクトに変換しています。

>>> datetime.datetime.strptime("12/04/2013",'%m/%d/%Y')
datetime.datetime(2013, 12, 4, 0, 0)

標準のmongoクエリを使用して検索できるようにします。

私の問題は次のとおりです。また、何かが と同等の日付がわからないことを表現したいので、 null テストをNone行うことができます。orNoneを入力するための try-catch ブロックを使用して、この日付を過去または未来の非常に遠い場所に置くことができることに気づきましたが、これはハックな考え方であり、実際に None であるものを表すために適切な None 型を使用したいと思います。''None

None 日時を入力するにはどうすればよいですか?

4

2 に答える 2

8

MongoDB を検索するnullと、欠損値は同等です。

> db.foo.insert({a: null})
> db.foo.insert({})
db.foo.find({a: null}, {_id: 0})
{ "a" : null }
{  }

次の場合と同じように機能しpymongoます。

>>> [doc for doc in pymongo.MongoClient().test.foo.find({'a': None}, {'_id': 0})]
[{u'a': None}, {}]

だからNone良い選択のようです。これは Python のセマンティクスと一貫性があり、dict.getメソッドのデフォルトの動作とうまく連携し、Python ドライバーを使用するときに直観的に MongoDB の型にマップされます。

于 2013-12-04T23:13:18.447 に答える
1

MongoDB は NoSQL データベースであるため、興味深いデータ モデルを作成できます。

http://docs.mongodb.org/manual/core/data-modeling-introduction/

コレクション内の各ドキュメントは、同じフィールド名のセットを持つ必要はありません。日付がわからない場合は省略して構いません。ドキュメントを取得するときに、アプリケーション コードでタイムスタンプの存在を簡単に確認できます。

import pymongo
import datetime

mclient = pymongo.MongoClient()
mclient.test.example.insert({'Name': "Orange"})
mclient.test.example.insert({'Name': "Lemon", 'timestamp':datetime.datetime.now()})
for document in mclient.test.example.find():
    if "timestamp" in document:
        print document
于 2013-12-12T16:52:24.567 に答える