我有一个在MongoDB外壳上运行的简单查询:

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,没有相关的例子。

最佳答案

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"), "}");

关于mongodb - mongoc驱动程序:如何基于ISOdate进行查询?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43148244/

10-16 14:23