16

MongoDB のBSON の厳密な JSON 表現を使用して、日付比較クエリを作成しようとしています。

MongoDB シェル (v2.4.3) で動作させたい

これが私が試したことです...

atセットアップ: 2020 年 1 月 1 日の日付で新しいドキュメントを作成します。

> db.myTimes.insert({"at": new Date("2020-01-01")})

日付 > 2010 の厳密ではないクエリを使用しても問題ありません。

> db.myTimes.find({"at": {"$gt": new Date("2010-01-01")}})
{ "_id" : ObjectId([snipped]), "at" : ISODate("2020-01-01T00:00:00Z") }

ただし、厳密な JSON クエリを使用すると... NO DICE

> db.myTimes.find({"at": {"$gt": {"$date":"2010-01-01T00:00:00Z"}}})
> db.myTimes.find({"at": {"$gt": {"$date":"2010-01-01"}}})
> db.myTimes.find({"at": {"$gt": {"$date": 1262304000000}}})
> db.myTimes.find({"at": {"$lte": {"$date": 1262304000000}}})

(ご覧のとおり、ISO8601の日付、エポックタイムを試し、これらが相互に排他的であるという理論に変更$gtしたため、そのうちの1つが何かを返すはずです:-)$lte

ご指摘ありがとうございます。

-B

4

2 に答える 2

3

mongo シェルは Strict JSON モードをサポートしていません。このチケットを参照してください: https://jira.mongodb.org/browse/SERVER-6813

ここにあるこのライブラリは、あなたが探していることを行うかもしれません (私は試していませんが): https://www.npmjs.com/package/mongodb-extended-json。複雑なことにはmongoシェルを使用しないので、シェルでこれを機能させることができるかどうか、またはどのように機能させるかはわかりません。

補足として、別の言語を使用する場合は、pymongo に次のコードを使用しています。

import bson.json_util
mongo_queryD = bson.json_util.loads(mongo_query_str)
db.collection.find(mongo_queryD)

残念ながら、これは int64 形式のタイムスタンプを持つ最後の 2 つの例でのみ機能します。

于 2015-03-17T13:03:54.217 に答える