mongoc 驱动程序:如何基于 ISOdate 进行查询?
mongoc driver: how to query based on ISOdate?
我有一个适用于 mongodb shell:
的简单查询
db.collection.find({"date": {$lt: ISODate("2015-11-03T00:00:00Z")} })
非常简单,只是试图找到日期在 2015-11-03 之前的任何记录。现在我想翻译成 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
你的 collection 说它有一个 ISODate,所以你需要 BCON_DATE_TIME 类型。
切换类型并删除额外的尾随右大括号,您的查询可能需要如下所示。
query = BCON_NEW ("date", "{", "$lt", BCON_DATE_TIME("2015-11-03T00:00:00Z"), "}");
我有一个适用于 mongodb shell:
的简单查询db.collection.find({"date": {$lt: ISODate("2015-11-03T00:00:00Z")} })
非常简单,只是试图找到日期在 2015-11-03 之前的任何记录。现在我想翻译成 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
你的 collection 说它有一个 ISODate,所以你需要 BCON_DATE_TIME 类型。
切换类型并删除额外的尾随右大括号,您的查询可能需要如下所示。
query = BCON_NEW ("date", "{", "$lt", BCON_DATE_TIME("2015-11-03T00:00:00Z"), "}");