我插入了这样的数据
{" userid" :" manaf", " DataValue" :{" $ type" :" 00"," $ binary" :" sampleBinaryData" }, "时间戳" :1460718961132, " _id" :{" $ oid" :" 5710cd7194e5f57831eea91e" }, " __ V" :0 }
我需要提供数据b / w时间戳值。
我已经通过在mongoDb客户端控制台中使用以下命令来完成此操作。
db.sampleCollection.find({" timestamp":{" $ gte":1460703944149," $ lt":1460703944683}," userid& #34;:" manaf"})
但是我不能在我的c程序中使用这个。
这是我的客户端程序
#include <bson.h>
#include <mongoc.h>
#include <stdio.h>
int
main (int argc,
char *argv[])
{
mongoc_client_t *client;
mongoc_collection_t *collection;
mongoc_cursor_t *cursor;
const bson_t *doc;
bson_t *query;
char *str;
mongoc_init ();
client = mongoc_client_new ("mongodb://localhost:27017/");
collection = mongoc_client_get_collection (client, "sampledb", "sampleCollection");
query = bson_new ();
BSON_APPEND_UTF8 (query, "timestamp": {"$gte":1460703944149, "$lt":1460703944683 },"userid": "manaf");
cursor = mongoc_collection_find (collection, MONGOC_QUERY_NONE, 0, 0, 0, query, NULL, NULL);
printf("Started\n");
while (mongoc_cursor_next (cursor, &doc)) {
str = bson_as_json (doc, NULL);
printf ("%s\n", str);
bson_free (str);
}
bson_destroy (query);
mongoc_cursor_destroy (cursor);
mongoc_collection_destroy (collection);
mongoc_client_destroy (client);
mongoc_cleanup ();
return 0;
}
我有这样的错误
error: macro "BSON_APPEND_UTF8" passed 4 arguments, but takes just 3
BSON_APPEND_UTF8 (query, "timestamp": {"$gte":1460703944149, "$lt":1460703944683 },"userid": "manaf");
这个程序的实际问题是什么?
答案 0 :(得分:0)
可能需要$和查询。如果BCON可用,请使用它。
#include <bson.h>
#include <bcon.h>
...
query = BCON_NEW("$and","[",
"{", "timestamp", "{", "$gte", BCON_INT64(1460703944149), "}", "}",
"{", "timestamp", "{", "$lt", BCON_INT64(1460703944683), "}", "}","]");
...
答案 1 :(得分:0)
我知道这是一个古老的问题,但我想简单介绍一些可能有用的要点。
首先,我认为这可能更容易用BCON(基本文档here)进行可视化,但我相信问题中引用的特定错误是由于{{内部存在额外的逗号“ 1}} document(这一个:timestamp
。这个逗号在JSON中很好,但它会使宏失败,因为它认为你现在正在发送下一个参数。你可以用所描述的技术克服它here,但我相信一旦解决了问题,您仍然会遇到问题,因为看起来BSON_APPEND_UTF8签名需要指向您的文档的指针,然后是密钥,然后是UTF8字符串值。 tutorial:
此示例添加了对BSON_APPEND_UTF8()的调用以查找匹配{&#34; hello&#34; :&#34;世界&#34;} ...
{"$gte":1460703944149, "$lt":1460703944683 }
但是,在这里,您希望将BSON_APPEND_UTF8 (query, "hello", "world");
字段设置为文档,而不是UTF8值。您提供的文档将包含timestamp
字段和$gte
字段设置为您的日期/时间范围。您还需要将$lt
字段添加到查询文档中,然后您应该已经完成了可以发送的查询。
使用userId
方法,我相信您可以执行以下操作来完成此操作(我没有测试过此代码,但我认为它应该非常接近):
bson_append_<insert datatype here>
或者,使用BCON:
bson_t *query;
bson_t timestampDoc;
query = bson_new();
BSON_APPEND_DOCUMENT_BEGIN(query, "timestamp", ×tampDoc);
bson_append_date_time(×tampDoc, "$gte", -1, 1460703944149);
bson_append_date_time(×tampDoc, "$lt", -1, 1460703944683);
bson_append_document_end(query, ×tampDoc);
BSON_APPEND_UTF8(query, "userId", "manaf");
答案 2 :(得分:-1)
您可以更改宏BSON_APPEND_UTF8的参数,如下所示
BSON_APPEND_UTF8 (query, "\"timestamp\": {\"$gte\":1460703944149, \"$lt\":1460703944683 }","\"userid\": \"manaf\"");