MongoDBデータベースクエリ(A)

1 MongoDBの紹介

MongoDBは、分散ファイル・ストレージベースのデータベースです。C ++言語で書かれました。WEBアプリケーションのためのスケーラブルで高性能データ・ストレージ・ソリューションを提供するために設計されています。

MongoDBは、リレーショナルデータベースのような豊かな、最も間のリレーショナルデータベースと非リレーショナルデータベース、非リレーショナルデータベース機能との機能を持つ製品です。

MongoDBの中に再帰的関係

  • MongoDBの一例は、独立したデータベース(データベース)の複数を有していてもよく、各データベースは、独自のセットを有します。
  • ダイナミックモードは、テーブルの(動的スキーマ)を有するようにコレクション(収集)を見ることができます。
  • MongDB文書は、リレーショナル・データベース内の行に対応する、データの基本単位です。
  • 各文書は、これが属する文書のコレクションで唯一の鍵であり、特殊キー「ID」を持ちます。

文書キー/値ペアを順序付けられる:{ "X":1、 "Y":2}と{ "Y":2、 "X":1}異なります。

下記によって図の例では、我々はいくつかの概念モンゴのより直感的な理解をすることができます:

2 Pythonの接続にMongoDB

主な仕事は時々Pythonの接続MongoDBのクエリを使用して、クエリウィンドウアリクラウドサーバでMongoDBのクエリです。

Pythonのは、次の操作に基づいて、アリ雲のMongoDB、Pythonのモジュールpymongoをインストールする最初の必要性を接続されています。

from pymongo import MongoClient

client = MongoClient('mongodb://username:password@localhost:port/database')
db = client.database  # 这里为什么还要再加一次数据库名称?

# 或者
client = MongoClient('mongodb://localhost:port/database', username='username', password='password')

3 Mongoの日付タイプ

Mongoのは、次のような、ストレージタイプISODateの時間に見ることができる"ISODate(" 2018-07-11T02:12である:49.109Z ")" "reqTime" これは、UTC(協定世界時)にはMongoの時間GMT(グリニッジ時間)時間に相当するストレージのタイプにあります。そして、我々は現在、8(北京時間)に位置しているので、モンゴは、現在の時刻を設定し、マイナス8、その後、GMTとして格納します。

3.1モンゴシェル型の日

3.1.1新しいDate()、および日付()の比較

# new Date() 返回当前的 Date 日期对象,mongo shell 使用 ISODate 来包装 Date 对象
db.test.insert( { mark: 1, mark_time: new Date() } )
# Date() 返回当前日期的字符串形式
db.test.insert( { mark: 2, mark_time: Date() } )
db.test.find()

# 返回结果
{ "_id" : ObjectId("5126e00939899c4cf3805f9b"), "mark" : 1, "mark_time" : ISODate("2019-06-05T03:03:37.312Z") }
{ "_id" : ObjectId("5126e00c39899c4cf3805f9c"), "mark" : 2, "mark_time" : "Wed Jun 05 2019 11:03:40 GMT+0800" }

私たちは、に渡すことができる新しい日付()ビルダーまたはISODate()次の形式を受け入れる機能:

  • 新しい日付(「YYYY-MM- DD」)を返しますISODate指定された日付を
  • 日付新新(「YYYY-MM-DD T HH:MM:SS」)日時クライアントが現在のタイムゾーンを指定し、UTCに戻るISODateは、日時を指定しました
  • 新しい日付( "YYYY-MM- DDTHH:MM:SSZ")は、 UTCの日時に指定され、UTC返しISODate指定された日時を
  • 新しい日付(整数) UNIXエポック(月1,1970)日時から指定はミリ秒単位で、返すISODate例を

3.1.2アリクラウドMongoDBのクエリウィンドウの実行中のインスタンス

例1

db.arcVerify.aggregate([    
    {'$match': {'addTime': {'$gte': new Date("2019-06-05T00:00:00") } }
    },    
    
    {'$match': {'sceneNo': '800'}
    }
])

例2

db.arcVerify.aggregate([    
    {'$match': {'addTime': {'$gte': new Date("2019-06-05 00:00:00") } }
    },    
    
    {'$match': {'sceneNo': '800'}
    }
])

例3

db.arcVerify.aggregate([    
    {'$match': {'addTime': {'$gte': new Date("2019-06-05") } }
    },    
    
    {'$match': {'sceneNo': '800'}
    }
])

例4

db.arcVerify.aggregate([    
    {'$match': {'addTime': {'$gte': new Date("2019-06-05T00:00:00Z") } }
    },    
    
    {'$match': {'sceneNo': '800'}
    }
])

例5

db.arcVerify.aggregate([    
    {'$match': {'addTime': {'$gte': ISODate("2019-06-04T16:00:00.000Z")} }
    },
    
    {'$match': {'sceneNo': '800'}
    }
])

例6

# 图中显示时间为当前运行时间
db.arcVerify.aggregate([    
    {'$match': {'addTime': {'$gte': Date("2019-06-05 00:00:00.00")} }
    },
    
    {'$match': {'sceneNo': '800'}
    }
])

3.2 Pythonのクエリ日

3.2.1 Pythonの日付タイプ

pyMongo 使用 datetime.datetime 对象来表示 MongoDB documents(文档) 中 dates 和 times。因为 MongoDB 假定 dates 和 times 是 UTC 形式的,所以我们要确保被写进数据库的时间可以反映 UTC。例如,下面的代码在 MongoDB 中存储当前 UTC date 和 time:

result = db.objects.insert_one( { "last_modified": datetime.datetime.utcnow() } )

使用 datetime.datetime.utcnow() 可以返回 UTC 中的 current time,而 datetime.datetime.now() 返回 current local time。避免如下操作:

result = db.objects.insert_one( { "last_modified": datetime.datetime.now() } )

在上面两个例子中,虽然两个文档都在同样的 local time 被存储,但是 last_modified 值是非常不同的。这可能对于读取它们的应用来说会有些混乱:

[doc['last_modified'] for doc in db.objects.find()]  

# 结果
[datetime.datetime(2019, 6, 7, 4, 23, 41, 582944),
 datetime.datetime(2019, 6, 7, 12, 23, 42, 727949)]

3.2.2 实例

查找 2019-06-06 日的数据

from datetime import datetime

date = '2019-06-06'
intdate = [int(i) for i in date.split("-")]
date1 = datetime(intdate[0], intdate[1], intdate[2]) - timedelta(hours=8)
date2 = datetime(intdate[0], intdate[1], intdate[2]) + timedelta(hours=16)

db.arcSceneRuleDetail.aggregate([
        {'$match':
            {'addTime': {"$gte": date1,
                         "$lt": date2}
            }
        },
        ...
])

# 或者 
db.arcSceneRuleDetail.aggregate([
        {'$match':
            {'addTime': {"$gte": datetime(2019, 6, 5, 16, 0),
                         "$lt": datetime(2019, 6, 6, 16, 0)}
            }
        },
        ...
])

参考资料

  1. MongoDB 概念解析

  2. Mongo日期类型

  3. mongoDB 文档 Date()

  4. PyMongo 3.8.0 documentation 中 Datetimes and Timezones

おすすめ

転載: www.cnblogs.com/shaocf/p/10953894.html