MongoDB:如何使findAndModify返回Last Last Record

时间:2012-12-17 19:23:24

标签: java mongodb

我是Mongo DB的新手并且遇到麻烦,因为它在不同的环境(Dev,QA和Production)中表现不同

我正在使用findAndModify来更新MongoDB中的记录。

每天运行一个Job,它将数据更新/插入Mongo DB,我使用findAndModify来更新记录。

但我观察到的是,findAndModify返回的第一条记录在Dev,QA和Production environemnts中有所不同,尽管这三种环境具有相同的数据?

根据Mongo DB文档,它声明findAndModify将修改第一个文档

目前这是我的代码:

BasicDBObject update = new BasicDBObject();
update.append("$set", new BasicDBObject(dataformed));
coll.findAndModify(query, update);

请告诉我如何确保findAndModify返回上次更新的记录,而不是依赖于不可预测的行为?

已编辑的部分

我正在尝试对我的代码使用sort,但它给了我编译错误

coll.findAndModify(查询,排序:{rating:1},更新);

我有一个名为lastUpdated的字段,它是使用System.currentTimeMilis

创建的

所以我可以使用这个lastUpdated,如这样显示最后更新记录

coll.findAndModify(  query, 
    new BasicDBObject("sort", new BasicDBObject("lastUpdated ", -1)), 
    update);    

2 个答案:

答案 0 :(得分:2)

您似乎正在使用Java,因此您必须将sort参数构造为DBObject,就像其他参数一样:

coll.findAndModify(
    query, 
    new BasicDBObject("sort", new BasicDBObject("rating", 1)), 
    update);

答案 1 :(得分:1)

正如我们已在your other question向您解释的那样,您必须在文档中添加一个字段,其中包含更改日期,然后按该字段排序,或者您必须使用capped collection,因为他们保证保留插入顺序。