2017-03-31 65 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),「}」);工作得很好 –

相關問題