我是一个使用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建议的第一个空白""名称以允许它编译。使用过滤器的第二个查询工作正常,但我总是以最旧到最新的顺序返回结果。
答案 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);