2017-03-31 7 views
2

私はMongoDBのシェル上で働いていた単純なクエリを持っている:mongocドライバ:どのようにISOdateに基づいてクエリを実行するのですか?

db.collection.find({"date": {$lt: ISODate("2015-11-03T00:00:00Z")} }) 

非常にシンプルな、ちょうど2015年11月3日前の日付を持つすべてのレコードを検索しようとしています。今、私は動作しないコードを以下している、mongocドライバで同様のコードに変換したい:

query = BCON_NEW (
    "date", "{", "$lt", "2015-11-03T00:00:00Z", "}", "}");  
cursor = mongoc_collection_find (collection, MONGOC_QUERY_NONE, 0, 0, 0, query, NULL, NULL); 

誰もがmongocに書き込むための正しい方法を知っていますか?私はmongoc.orgを見てきました。そこには関連する例はありません。

答えて

2

BCONが非常に厄介ですが、あなたはそれのこつすべての

ファーストを得れば、それは超便利で、あなたがキーと慎重に括弧を数えていないものにBCONタイプを適用する必要があります。すべての開きブレースには閉じたブレースが必要です。 BCON_NEW自体は、ドキュメントの最初と最後のブレースを処理します。

query = BCON_NEW ("date", "{", "$lt", "2015-11-03T00:00:00Z", "}", "}"); 
        ^   ^   ^    ^
        |    |    |     | 
keys ------------------------------    |     | 
value --------------------------------------------     | 
brace that shouldn't exist ------------------------------------------ 

このページは

https://github.com/mongodb/libbson/blob/master/src/bson/bcon.c#L214-L292

あなたが値を選択することができますあなたの視点の種類を教えてくれるあなたのコレクションは、それがISODateを保持していると言うので、あなたはBCON_DATE_TIMEタイプをするつもりです。

タイプを切り替えて、余分な末尾の閉じ括弧を取り除くと、クエリはおそらくこのようになります。

query = BCON_NEW ("date", "{", "$lt", BCON_DATE_TIME("2015-11-03T00:00:00Z"), "}"); 
+0

これは、BCON_DATE_TIMEはISOの日付形式を使用しませんが、エポック時間形式を使用する点を除いてはうまくいきます。この場合、query = BCON_NEW( "date"、 "{"、 "$ lt"、BCON_DATE_TIME(1446422400000)、 "}");かなりうまくいく –

関連する問題