查询订单似乎在上限集合中工作& C驱动程序

时间:2015-03-24 17:27:06

标签: mongodb mongodb-query

我是一个使用mongodb的新手,我试图用它来记录BeagleBone Black系统上的信息,使用由我在BBB上使用的debian jessie发行版提供的mongodb版本2.4.10。我使用[debian提供的第三方驱动程序" libmongo-client"] [1]从我的应用程序接口到mongodb,而不是官方的MongoDB C驱动程序。

我的问题是我试图按照与插入文件相反的顺序显示文档。我有自己的时间字段,现在是一个距离纪元毫秒的int64。我指定了一个搜索:

        query = bson_build_full(BSON_TYPE_DOCUMENT, "$orderby", true,
                            bson_build(
                                       BSON_TYPE_INT64, "time", -1,
                                       BSON_TYPE_NONE),
                            BSON_TYPE_NONE);

我已经尝试更改“订单”'从-1到1,但结果始终采用原始插入顺序。 我在这里搜索了这个列表,却无法找到任何看起来像是germain的结果。任何见解将不胜感激。

在发布以下评论后,我尝试将查询更改为:

        query = bson_build_full(BSON_TYPE_DOCUMENT, "$sort", true,
                            bson_build(
                                       BSON_TYPE_INT64, "$natural", -1,
                                       BSON_TYPE_NONE),
                            BSON_TYPE_NONE);

同样的结果,所有内容都按照插入数据库的顺序返回。然后我查看了查询,并决定我不知道" $ natural"的类型。应该是,所以我将其更改为INT32,并且我没有返回任何文件。所以至少我从数据库得到了一些反应,我要求的是。

A. Jesse添加了

1链接

已添加20150402
以下是我目前正在进行的两个查询的完整代码:

    if (dbET_ALL == filter)
{
    query = bson_build_full(BSON_TYPE_DOCUMENT, "$query", true,
                            bson_build(BSON_TYPE_INT64, "", 0,
                                       BSON_TYPE_NONE),
                            BSON_TYPE_DOCUMENT, "$orderby", true,
                            bson_build(BSON_TYPE_INT64, "time", -1,
                                       BSON_TYPE_NONE),
                            BSON_TYPE_NONE);
}
else
{
    query = bson_build_full(BSON_TYPE_DOCUMENT, "$query", true,
                            bson_build(BSON_TYPE_INT32, "entrytype", filter,
                                       BSON_TYPE_NONE),
                            BSON_TYPE_DOCUMENT, "$orderby", true,
                            bson_build(BSON_TYPE_INT64, "time", -1,
                                       BSON_TYPE_NONE),
                            BSON_TYPE_NONE);
}
bson_finish(query);

我有时想要所有条目,有时只需要1种类型。我添加了" $查询"按照A. Jesse建议的第一个空白""名称以允许它编译。使用过滤器的第二个查询工作正常,但我总是以最旧到最新的顺序返回结果。

1 个答案:

答案 0 :(得分:0)

如果您包含$query之类的特殊字段,则MongoDB查询需要$orderby字段。在shell中:

> db.capped.find({$orderby: {time: -1}})
> db.capped.find({$orderby: {time: -1}, $query: {}})
{ "_id" : ObjectId("551b10fe10de18a796aaf279"), "time" : 2 }
{ "_id" : ObjectId("551b10fc10de18a796aaf278"), "time" : 1 }
{ "_id" : ObjectId("551b10f810de18a796aaf276"), "time" : 0 }

我不知道bson_build_full的语法,但我希望您需要这样的内容来附加空的$query文档?:

    query = bson_build_full(
            BSON_TYPE_DOCUMENT, "$orderby", true,
                        bson_build(
                                   BSON_TYPE_INT64, "time", -1,
                                   BSON_TYPE_NONE),
            BSON_TYPE_DOCUMENT, "$query", true,
                        bson_build(BSON_TYPE_NONE),
                        BSON_TYPE_NONE);