2012-12-17 44 views
0

我是新来蒙戈DB和有,因为它是在不同的环境(开发,QA和生产)MongoDB的:如何使findAndModify返回最后更新的记录

表现不同,我使用findAndModify来更新记录的麻烦在我的MongoDB中。

有一个工作每天运行更新/插入数据到Mongo DB,我使用findAndModify更新记录。

但是我发现findAndModify返回的第一条记录在Dev,QA和Production environemnts中是不同的,尽管三个环境具有相同的数据。

按照蒙戈DB文件,它指出findAndModify将修改第一个文件

目前,这是我的代码:

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

请让我知道我可以保证的是,findAndModify返回最后更新的记录,而不是取决于不可预测的行为?

编辑部分

我想那种用我的代码,但它给我的编译错误

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

我有一个称为LASTUPDATED场这是使用System.currentTimeMilis

这样我就可以使用这个LASTUPDATED如图所示这种方式来获取最后更新记录

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

没有coll.sort,和我使用findAndModify并没有找到 – Pawan

+0

请在这里看到我的答案: [Fully working method](https://stackoverflow.com/questions/4943434/mongodbs-set-equivalent-in-its-java-driver/46728939#46728939) - 享受。 – JamesC

回答

2

看来您使用的是Java,所以你必须构建sort参数作为DBObject,就像其他参数:

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

非常感谢,这非常有帮助。 – Pawan

+0

我可以使用新的BasicDBObject(“排序”,新的BasicDBObject(“lastUpdated”,-1)),以获取使用findAndModify最后修改的记录? – Pawan

+0

@PreethiJain如果你的'update'对象更新'lastUpdated'到当前时间,是的。 – JohnnyHK

1

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

+0

非常感谢,我有一个更新在我的集合中的字段,我如何添加基于这个到我的代码排序? – Pawan